MySql получает 10 последних комментариев со всеми подкомментариями

У меня есть таблица комментариев, например

id | post_id | parent_id | user_id | text | time | likes

Комментарии могут иметь подкомментарии 1-го уровня (без вложенности 2-го/3-го уровня). Пользователи могут сортировать комментарии по времени/лайкам.

Каким будет запрос, чтобы получить 10 последних комментариев вместе с всеми их подкомментариями.

SELECT `id`, `user_id`, `text` 
FROM `comments` 
WHERE `post_id` = '$postId' OR `parent_id` IN 
(
   SELECT `id` FROM `comments` 
   WHERE `post_id` = '$postId' 
   ORDER BY `time` DESC 
   LIMIT 10
) 
ORDER BY `time` DESC 
LIMIT 10

Это не работает.


person user3282542    schedule 11.08.2014    source источник
comment
Удалите внешний лимит, если хотите получить все комментарии к подпунктам.   -  person M Khalid Junaid    schedule 11.08.2014
comment
@MKhalidJunaid Выдает ошибку, что MySql не поддерживает подзапрос LIMIT. Как вы предполагаете, удаление внешнего ограничения приведет к отображению всех комментариев верхнего уровня, не так ли?   -  person user3282542    schedule 11.08.2014
comment
Поделитесь схемой пожалуйста   -  person M Khalid Junaid    schedule 11.08.2014


Ответы (1)


При необходимости добавьте другие условия.

SELECT c.`id`, c.`parent_id`, c.`user_id`, c.`text` 
FROM `comments` c,
(
   SELECT `id` FROM `comments` 
   WHERE `post_id` = '$postId' 
   ORDER BY `time` DESC 
   LIMIT 10
) temp
where c.id = temp.id or c.parent_id=temp.id
person TJ-    schedule 11.08.2014
comment
Это я и сам понял :) - person user3282542; 12.08.2014
comment
Что насчет заказа? .. Комментарии верхнего уровня возвращаются в порядке времени описания... но как насчет подкомментариев... будут ли они возвращаться в порядке их идентификатора или в произвольном порядке? - person user3282542; 12.08.2014
comment
Если порядок не указан, нет гарантии, что они будут возвращены в определенном порядке. Если вы хотите, чтобы все комментарии упорядочивались по времени, вам нужно будет добавить явное предложение order by. - person TJ-; 12.08.2014
comment
Я понимаю, что касается заказа. Но у меня 15000 записей, и этот запрос работает, но кажется медленным. Может ли быть лучший запрос для достижения того же? Я думал сделать это за 2 запроса: 1) получить корневые комментарии 2) получить соответствующие подкомментарии. Будет ли это лучшим вариантом? - person user3282542; 12.08.2014
comment
15000 это не много. Ваши индексы на месте? parent_id, post_id, время (индивидуальное)? Вы могли бы пойти со вторым вариантом, что означает 2 запроса? Измерьте, я бы сказал. - person TJ-; 12.08.2014