MySQL: поместите строки, в которых parent_id заполнен сразу после идентификатора родителя.

0

У меня есть таблица с 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

  • 0
    Спасибо за предоставленные образцы данных! Вопрос - ваш ожидаемый результат не включает comment_id=1 есть ли причина для этого?
Теги:

1 ответ

1
Лучший ответ

Если я правильно понял ваш вопрос, я думаю, что этот запрос будет делать то, что вы хотите. Я немного изменил вашу скрипку, чтобы добавить еще один комментарий к комментарию 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню