TicketComments - как вытащить одну ветку?

Как можно с помощью TicketComments вывести только одну ветку с комментариями.

Сразу уточню, что под веткой я имею ввиду не все комментарии определённой страницы (не thread), а только один комментарий со всеми ответами на него.

Задача упрощается тем, что мне нужно выбрать только 2 уровня комментариев, третий не нужно (необязателен).

Вот более наглядно:
- Комментарий 1
- - Комментарий 1.1
- - Комментарий 1.2
- Комментарий 2
- - Комментарий 2.1
- Комментарий 3
Допустим у «Комментарий 2» id == 39. Мне нужно выбрать только следующее:
- Комментарий 2
- - Комментарий 2.1

Куда мне нужно копать?
Василий Столейков
21 июня 2016, 13:47
modx.pro
3
1 975
0
Поблагодарить автора Отправить деньги

Комментарии: 10

Василий Столейков
21 июня 2016, 17:08
0
Почему не срабатывает это условие:
'where' => '{ "id":"39","OR:parent":"39" }',
По отдельности вытаскивает либо Комментарий-родитель, либо всех его прямых потомков.
    Василий Столейков
    21 июня 2016, 17:12
    0
    Получается какой-то кривой SQL в итоге. Вот вырезка из showLog:
    0.0000379: Added where condition: published=1, id=39, OR:parent=39
    0.0000110: Sorted by TicketComment.id, ASC
    0.0001040: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `TicketComment`.`id`, `TicketComment`.`thread`, `TicketComment`.`parent`, `TicketComment`.`text`, `TicketComment`.`name`, `TicketComment`.`email`, `TicketComment`.`ip`, `TicketComment`.`rating`, `TicketComment`.`rating_plus`, `TicketComment`.`rating_minus`, `TicketComment`.`createdon`, `TicketComment`.`createdby`, `TicketComment`.`editedon`, `TicketComment`.`editedby`, `TicketComment`.`published`, `TicketComment`.`deleted`, `TicketComment`.`deletedon`, `TicketComment`.`deletedby`, `TicketComment`.`properties`, `parent` as `new_parent`, `rating` as `rating_total`, `Thread`.`resource`, `User`.`username`, `Profile`.`internalKey`, `Profile`.`fullname`, `Profile`.`phone`, `Profile`.`mobilephone`, `Profile`.`blocked`, `Profile`.`blockeduntil`, `Profile`.`blockedafter`, `Profile`.`logincount`, `Profile`.`lastlogin`, `Profile`.`thislogin`, `Profile`.`failedlogincount`, `Profile`.`sessionid`, `Profile`.`dob`, `Profile`.`gender`, `Profile`.`address`, `Profile`.`country`, `Profile`.`city`, `Profile`.`state`, `Profile`.`zip`, `Profile`.`fax`, `Profile`.`photo`, `Profile`.`comment`, `Profile`.`website`, `Profile`.`extended`, `Profile`.`email` as `user_email`, `Vote`.`value` as `vote`, COUNT(`Star`.`id`) as `star` FROM `modx_tickets_comments` AS `TicketComment` JOIN `modx_tickets_threads` `Thread` ON `Thread`.`id` = `TicketComment`.`thread` AND `Thread`.`name` = "resource-364451" LEFT JOIN `modx_users` `User` ON `User`.`id` = `TicketComment`.`createdby` LEFT JOIN `modx_user_attributes` `Profile` ON `Profile`.`internalKey` = `TicketComment`.`createdby` LEFT JOIN `modx_tickets_votes` `Vote` ON `Vote`.`id` = `TicketComment`.`id` AND `Vote`.`class` = "TicketComment" AND `Vote`.`createdby` = 2 LEFT JOIN `modx_tickets_stars` `Star` ON `Star`.`id` = `TicketComment`.`id` AND `Star`.`class` = "TicketComment" AND `Star`.`createdby` = 2 WHERE  ( `TicketComment`.`published` = 1 AND `TicketComment`.`id` = 39 AND `TicketComment`.`OR` parent '39' )  GROUP BY TicketComment.id ORDER BY TicketComment.id ASC "
    Смущает получившееся условие в итоге:
    WHERE  ( `TicketComment`.`published` = 1 AND `TicketComment`.`id` = 39 AND `TicketComment`.`OR` parent '39' )
    Василий Столейков
    22 июня 2016, 11:09
    0
    Может как-то нужно с помощью innerJoin? Что-то у меня не получается ника…
      Василий Наумкин
      22 июня 2016, 11:11
      +1
      Нет, только своим сниппетом, который рекурсивно выберет всех потомков, начиная от какого-то id.
        Василий Столейков
        22 июня 2016, 11:16
        0
        Ок, спасибо что направил, а то я бы ещё кучу времени потратил на это! По крайней мере направлю его в нужное русло, спасибо что ответил!
          Василий Столейков
          22 июня 2016, 12:27
          0
          Извини что немного не по теме, но постоянно мазолил один вопрос: почему здесь в сообществе минимальная длина поискового запроса 3 символа?
          Очень часто приходится искать через гугл на этом сайте что-то типа: «modx.pro IN» или «modx.pro IS», или «modx.pro WHERE IN».
          Мне кажется, или если вбить тут в поиск modx.pro/search?query=where+in он будет искать только слова длина которых больше чем 3 символа, то есть поиск "where in" равнозначен поиску "where" и оба слова вместе никак не найти как только через гугл?

          P.S. Так же часто приходится искать таким образом и другие слова, например OR, IN, IS…
            Василий Столейков
            22 июня 2016, 12:44
            0
            Просто буквально вчера видел где-то тут кусок кода для выборки из нескольких значений, что-то типа:
            &where=`{ "parent:IN":"14,15,16,17" }`
            А сегодня уже второй час ищу безрезультатно… Досадно как-то на себя…
              Василий Столейков
              22 июня 2016, 13:34
              3
              +1
              Для себя на память выложу решение на Fenom чтобы снова не искать так долго:
              'where' => '{ "id:IN":['~$comment_childrens~'] }',
              Василий Наумкин
              22 июня 2016, 15:04
              +2
              Поправил
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10