"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 Zeichen

    SELECT 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?


Anmelden zum Antworten