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
Какво ще кажете за поръчката? .. Коментарите от най-високо ниво се връщат по ред по време desc ... но какво да кажем за подкоментарите ... ще бъдат ли върнати по реда на техния ID или произволен ред? - person user3282542; 12.08.2014
comment
Ако поръчката не е посочена, няма гаранция, че ще бъдат върнати в определена поръчка. В случай, че искате всички коментари да бъдат подредени по време, ще трябва да добавите изрична клауза order by. - person TJ-; 12.08.2014
comment
Разбирам за поръчката. Но имам 15 000 записа и тази заявка работи, но изглежда бавна. Може ли да има по-добра заявка за постигане на същото? Мислех да направя това с 2 заявки - 1) за получаване на коренни коментари 2) получаване на съответните им подкоментари. Това по-добър вариант ли ще е? - person user3282542; 12.08.2014
comment
15 000 не е голямо число. Вашите индекси на място ли са? parent_id, post_id, време (индивидуално)? Можете да изберете втората опция, което означава 2 заявки? Измерете го, бих казал. - person TJ-; 12.08.2014