Tach auch,
ich benutze (leider) MySQL in der Version 4.0.18 - sub-selects sind daher nicht möglich.
Jetzt zum Problem:
Die klassische Forums-Tabelle mit im wesentlichen:
id
parentid
threadid
titel
text
Jedes Posting hat eine eindeutige id.
Außerdem die ID des Postings, auf das sich die Antwort bezieht (0 für das Startposting) als parentid.
Außerdem haben noch alle Postings eines Threads in der threadid die id des Ausgangspostings.
Wenn ich jetzt nur die id eines beliebigen Postings habe, möchte ich dazu rekursiv alle Antworten haben.
Wie bekomme ich das mit möglichst wenig DB-Anfragen hin?
Klar, ich kann im ersten Schritt alle die Postings selektieren, die die gegebene id als parent haben.
Im zweiten Schritt dann die, die eine der ids aus dem ersten Schritt als Parent haben.
Im dritten Schritt dann die, die eine der ids aus dem zweiten Schritt als Parent haben usw. bis ein Schritt keine Ergebnisse mehr bringt.
Das gibt also pro Antwortebene eine DB-Anfrage - nicht sehr effektiv.
Eine andere Möglichkeit wäre, daß ich mir den gesamten Thread hole
per
SELECT f.id, f.parentid, f.threadid FROM forumtable as f LEFT JOIN forumtable as t ON f.threadid = t.threadid WHERE t.id = 4711;
und dann die parentid-Einträge in der Programmlogik durchsuche.
Das gibt zwar erstmal nur eine DB-Anfrage, aber bei Riesen-Threads, aus denen nur ein winziger Sub-Tree gebraucht wird, wird haufenweise Zeugs von der DB zum Programm übertragen, nur um dann weggeschmissen zu werden.
Meine Frage: gibt es - ohne Subselects - eine Möglichkeit, mit einer DB-Abfrage den gesamten Subtree zu erwischen?
(von mir aus auch 2 - ich könnte mir vorstellen, daß erstmal eine benötigt wird, um die threadid zu bekommen)
Danke schon mal, bis später!
Peter