У меня есть таблица с 3 столбцами comment_id, comment и parent_comment_id. Запрос всегда ограничен 10, и я должен возвращать в течение этих 10 результатов все comment_id, за которыми следуют строки, у которых есть parent_comment_id предыдущего comment_id.
Пример: comment_id 2 имеет ответ в comment_id 20, у которого parent_comment_id установлен как 2. Мне нужен результат, чтобы он выглядел следующим образом:
comment_id ... parent_comment_id
2 0
20 2
3 0
4 0
5 0
15 5
...
Есть ли хороший способ заказать его? Вот пример данных: http://sqlfiddle.com/#!9/70120c/5
Если я правильно понял ваш вопрос, я думаю, что этот запрос будет делать то, что вы хотите. Я немного изменил вашу скрипку, чтобы добавить еще один комментарий к комментарию 1 (новая версия здесь). Заказ немного сложнее, первый термин заказывает комментарий и его ответы вместе, а затем второй термин заказывает комментарии внутри этой группы (так что 1 и его ответы 3 и 15 сортируются в этом порядке). DISTINCT
требуется для предотвращения множественных строк вывода для комментария, который имеет несколько ответов.
SELECT DISTINCT c.comment_id,c.comment,c.parent_comment_id
FROM comments c
LEFT JOIN comments r ON c.comment_id = r.parent_comment_id
ORDER BY IF(c.parent_comment_id=0, c.comment_id, c.parent_comment_id), c.comment_id
LIMIT 10;
Выход:
comment_id comment parent_comment_id
1 The earth is flat 0
3 Response to 1 1
15 Another response to 1 1
2 One hundred angels can dance on the head of a pin 0
14 Response to 2 2
4 The earth is like a ball. 0
6 Response to 4 4
5 The earth is like a ball. 0
7 The earth is like a ball. 0
8 The earth is like a ball. 0
comment_id=1
есть ли причина для этого?