Ich habe eine einfache Tabelle wie diese:
+------------+---------+-----------+--------------+
| 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 |
+------------+---------+-----------+--------------+
-
Die Spalte parent_id zeigt uns, dass dieser Kommentar eine Antwort auf einen anderen Kommentar mit dieser ID ist.
-
Angenommen, es gibt nur eine Verschachtelung von Kommentaren auf einer Ebene.
Jetzt muss ich zurückkehren nur die ersten 5 Elternkommentare und alle Kinder, die zu ihnen gehören.
Ich habe eine Anfrage dazu, aber es gibt ein Problem.
(
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
)
)
Das Problem ist, dass meine aktuelle mySQL-Version kein LIMIT in Unterabfragen unterstützt. Außerdem scheint es, dass ich dieselbe SELECT-Abfrage zweimal ausführe!
Ich bin sicher, dass es eine Möglichkeit gibt, dies auf elegantere Weise zu tun.