"recursives" sql-statement (child/parentID)



  • Hallo,
    ich bin dabei ein kleines Nachrichtensystem zu schreiben. Dabei habe ich mal wieder das Problem, dass die Nachrichten mittels parentID in der DB verbunden sind.
    Tabellenstruktur:
    MessageID, ParentID, Title, Text

    z.b.
    1, 0, "Msg1", "Txt1"
    2, 1, "Antwort auf Msg1", "Txt2"
    3, 0, "TestMsg", "Text"
    4, 2, "RE: Antwort auf Msg1", "Txt2"

    ist es möglich alle zusammenhängenden" Nachrichten mit einem SQL-Statement "abzufrühstücken", sodass ich nur die ID (der "Hauptnachricht") in der where-klausel eintrage, und alle Folgeantworten zurückbekomme? (also bei ID=1 => 1,2,4 )



  • Woher weiß Du das 4 zu 1 gehört?



  • Es gibt solche Konstrukte, allerdings nicht für jedes DBS und außerdem sind sie datenbanktypspezifisch. In Oracle würde man das beispielsweise mit CONNECT BY erledigen. Falls dein System sowas nicht unterstützt müsstest du dir ein anderes Design überlegen - den ganzen Pfad speichern oder die Id des Threaderstellers mitführen, den ganzen Thread in den Client laden und dort sorteiren.



  • Unix-Tom schrieb:

    Woher weiß Du das 4 zu 1 gehört?

    Durch die Client-Parent-Beziehungen
    4 => 2
    2 => 1



  • ok, danke .
    datenbank ist mysql. ich werd mal suchen ob es sowas wie CONNECT BY dort gibt; was ich aber nicht glaube 😞



  • OK Klar. Jetzt habe ich es verstanden.
    Warum fürst Du nicht auch noch eine Threadid ein.



  • ich denke eine Threadid alleine sollte hierfür auch ausreichen. es ist ja keine baumstruktur, sondern nur eine liste. und wenn man nach timestamp sortiert sollte die korrekte nachrichtenfolge wiedergegeben werden


Anmelden zum Antworten