"rekursiv" mit SQL suchen
-
Sorry mir ist nix besseres eingefallen!
Nehmen wir z.B. folgendes Beispiel:
+----+-----------+--------+ | id | name | id_alt | +----+-----------+--------+ | 1 | Stefan | NULL | | 2 | Felix | NULL | | 3 | F3li>< | 2 | F3li>< war früher Felix +----+-----------+--------+
Nun gibt es zu jedem Name Kommentare:
+--------------+-----------+--------------+ | kommentar_id | id (name) | text | +--------------+-----------+--------------+ | 1 | 3 | i <3 u :) | | 2 | 1 | du bist doof | | 3 | 2 | wer bist du? | +--------------+-----------+--------------+
Nun möchte ich alle Kommentare von F3li>< anzeigen lassen, also z.B. so:
SELECT kommentare.text FROM namen NATURAL JOIN kommentare WHERE name="F3li><";
Nun bekomm ich aber natürlich nur Kommentare von F3li><, aber ich möchte auch die alten (also die von Felix).
Kann ich das irgendwie mit einer SQL-Abfrage lösen?
Oder muss mehrere Querys nehmen bis irgendwann id_alt NULL ist?
-
du kannst sogenannte Wildcards verwenden, je nach verwendetem SQL-Sysntax gibt es da verschiedene
% - für kein bis beliebige Anzahl von Zeichen
_ - für genau 1 ZeichenSELECT kommentare.text FROM namen NATURAL JOIN kommentare WHERE name="F_li%";
[Edit]falls ein genauer Bezug zu id_alt gewünscht ist, probier mal folgendes
SELECT c.text FROM (namen a JOIN namen b on (a.id=b.id_alt)) join kommentare c on (c.id=a.id) WHERE a.name="F_li%";
-
Linnea schrieb:
[Edit]falls ein genauer Bezug zu id_alt gewünscht ist, probier mal folgendes
SELECT c.text FROM (namen a JOIN namen b on (a.id=b.id_alt)) join kommentare c on (c.id=a.id) WHERE a.name="F_li%";
Genau das mein ich, aber was wenn da noch ein Nachfolger ist, und noch einer? Geht das nicht dynamisch?