TicketComments - как вытащить одну ветку?
Как можно с помощью TicketComments вывести только одну ветку с комментариями.
Сразу уточню, что под веткой я имею ввиду не все комментарии определённой страницы (не thread), а только один комментарий со всеми ответами на него.
Задача упрощается тем, что мне нужно выбрать только 2 уровня комментариев, третий не нужно (необязателен).
Вот более наглядно:
Куда мне нужно копать?
Сразу уточню, что под веткой я имею ввиду не все комментарии определённой страницы (не thread), а только один комментарий со всеми ответами на него.
Задача упрощается тем, что мне нужно выбрать только 2 уровня комментариев, третий не нужно (необязателен).
Вот более наглядно:
- Комментарий 1
- - Комментарий 1.1
- - Комментарий 1.2
- Комментарий 2
- - Комментарий 2.1
- Комментарий 3
Допустим у «Комментарий 2» id == 39. Мне нужно выбрать только следующее:- Комментарий 2
- - Комментарий 2.1
Куда мне нужно копать?
Поблагодарить автора
Отправить деньги
Комментарии: 10
Почему не срабатывает это условие:
'where' => '{ "id":"39","OR:parent":"39" }',
По отдельности вытаскивает либо Комментарий-родитель, либо всех его прямых потомков.
Получается какой-то кривой 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' )
Может как-то нужно с помощью innerJoin? Что-то у меня не получается ника…
Нет, только своим сниппетом, который рекурсивно выберет всех потомков, начиная от какого-то id.
Ок, спасибо что направил, а то я бы ещё кучу времени потратил на это! По крайней мере направлю его в нужное русло, спасибо что ответил!
Извини что немного не по теме, но постоянно мазолил один вопрос: почему здесь в сообществе минимальная длина поискового запроса 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…
Очень часто приходится искать через гугл на этом сайте что-то типа: «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…
Просто буквально вчера видел где-то тут кусок кода для выборки из нескольких значений, что-то типа:
&where=`{ "parent:IN":"14,15,16,17" }`
А сегодня уже второй час ищу безрезультатно… Досадно как-то на себя…
Для себя на память выложу решение на Fenom чтобы снова не искать так долго:
'where' => '{ "id:IN":['~$comment_childrens~'] }',
Поправил
Супер! Спасибо! Теперь так удобно!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.