mySQL: Rekursion in Select?

Geshrec22

Grünschnabel
Hallo ich hätte da mal ne Frage bezüglicher "rekursiver" Tabellen...
Mit "rekursiv" meine ich tabellen wo innerhalb der Tabelle ein Datensatz auf einen anderen zeigt... sowas wird oft verwendet um Bäume abzubilden... z.B: in Foren oder sowas.

Meine Frage ist ob es eine Möglichkeit gibt einen ganzen Baum in einem einzigen Select zu erhalten...

Beispiel: Wenn ich sage:
PHP:
  SELECT * FROM threads WHERE parentthreadid = 14

erhalte ich alle _direkten_ "Kinder"....
Kann ich es irgendwie anstellen, _alle_ Kinder zu kriegen?
 
Hallo Geshrec22,
ich schon wieder... ;)
Zu so später Stunde noch eine schlechte Nachricht: Echte Rekursion gibts weder mit MySQL noch mit sonst einem gängigen SQL-DBMS (das ich kenne). SQL3 soll mit den "Recursive Unions" genau dieses Problem angreifen, das ist aber noch Zukunftsmusik (zumindest soweit ich weiß).

Mit SQL (auch mit MySQL) gibts allenfalls sowas ähnliches, eine Art "Rekursiver Join", indem man zu einem SELECT die gleiche Tabelle ein zweites (oder drittes , oder viertes, ...) mal joint.
Code:
SELECT *
FROM tabelle AS t1
LEFT JOIN tabelle AS t2 ON t2.parent_id = t1.id
LEFT JOIN tabelle AS t3 ON t3.parent_id = t2.id
LEFT JOIN tabelle AS t4 ON t4.parent_id = t3.id
...(usw)
Das ist natürlich keine echte Rekursion (die Anzahl der Levels muss vorher bekannt sein) und für Deinen Fall auch nicht wirklich hilfreich, weil es wahnsinnig komplex wird. Kannst ja mal mit rumspielen. In der Praxis ist das Ausprogrammieren der Rekursion eigentlich fast immer die einzige Lösung.

Martin
 
Wenn ich dich richtig verstehe, dann möchtest du zu einem bestimmten Thread = Thema alle dazugehörigen Einträge abfragen.

Normalerweise machst du das ja sowieso schon :p

Wenn du deine Einträge in die DB schreibst, dann gibst du doch dazu als Identifikationsnummern die Post-Nr und dei Thread-Id an

Wenn du jetzt eine Abfrage startest

Select * from `table` where threadid = 14

dann bekommst du den Thread Nr. 14 und alle Einträge, die diesselbe Threadid haben, folglich alle zum Thema gehörenden Antworten!

cu shutdown
 
Zurück