У меня есть простая таблица, как это:Выбор всех детей от всех родителей в MySql
+------------+---------+-----------+--------------+
| comment_id | post_id | parent_id | comment_text |
+------------+---------+-----------+--------------+
| 1 | 200 | 0 | a |
| 2 | 200 | 0 | b |
| 3 | 200 | 1 | c |
| 4 | 200 | 1 | d |
| 5 | 200 | 0 | e |
| 6 | 200 | 2 | f |
| 7 | 200 | 2 | g |
| 8 | 200 | 0 | h |
| 9 | 200 | 0 | i |
| 10 | 200 | 1 | k |
+------------+---------+-----------+--------------+
Колонка parent_id говорит нам, что этот комментарий является ответом на другой комментарий с этим идентификатором.
Предположим, что комментариев есть только один уровень.
Теперь мне нужно вернуться только первые 5 родительских замечаний и всех дети, которые принадлежат им.
У меня есть запрос для этого, но есть одна проблема.
(
SELECT c.*
FROM comments AS c
WHERE c.post_id = '200' AND parent_id='0'
LIMIT 0,5
)
UNION
(
SELECT c.*
FROM comments AS c
WHERE c.post_id = '200' AND c.parent_id IN
(
SELECT c.comment_id
FROM comments AS c
WHERE c.post_id= '200' AND parent_id='0'
LIMIT 0,5
)
)
Проблема в том, что моя текущая версия mySQL не поддерживает LIMIT в подзапросах. Также кажется, что я выполняю тот же запрос SELECT дважды!
Я уверен, что должен быть способ сделать это более элегантно.
Какую версию MySQL вы используете? 'SELECT @@ version'. –
это MySQL 5.1.36-community-log –
Почему у вас есть два комментария с одним и тем же идентификатором? Это ошибка в вопросе? –