MySQL - Zwei Spalten zusammenfassen + Join

MsvP@habdichliebhasi

Erfahrenes Mitglied
Hallo zusammen,

das nächste Problem steht an. Ebenfalls bei meinen Kommentartabellen.
Ich habe ein arges Performance-Problem, wenn ich versuche alle Antworten auf Kommentare zu filtern.

Das Problem besteht darin, dass meine Tabelle folgendermaßen aufgebaut ist:

ID | ID_ANSWER

Wenn ich einen neuen Kommentar schreibe so bleibt die Spalte ID_ANSWER "NULL".
Antworte ich auf einen vorhanden Kommentar so füllt sich die Spalte ID_ANSWER mit der ID des Hauptkommentars.

Soweit so gut. Wenn ich jetzt aber alle Antworten anderer User zu meinen Kommentaren filtern will, so muss ich eine Unterscheidung zwischen meinen "neuen" Kommentaren und denen, wo ich selbst nur Kommentiert habe setzen, um die richtige ID beim Join für die Antworten zu übergeben.

Ich hatte es jetzt so probiert:
SELECT * FROM comments
JOIN LEFT comments AS answers ON answers.ID_ANSWER = comments.ID OR answers.ID_ANSWER = comments.ID_ANSWER

Durch den OR-Befehl wird die Abfrage aber unheimlich langsam.

Ich habe das ganze auch schon mit CASE probiert - leider das gleiche Ergebnis.

Hat jemand hierfür eine gute Idee? Oder ist meine DB einfach blöd aufgebaut, und ich bräuchte noch eine Spalte, in der so etwas wie eine GLOBAL_ID steht, um mir das OR zu sparen?

Lg
MsvP
 
In deinem Datenmodel fehlt der Benutzer. Umdie Fragestellung richtig umzusetzen braucht man einen User um herauszufinden, ob der Komentar von jemand anderem stammt.

Wenn ich das richtig verstanden habe, so hast du so etwas
Code:
ID | ID_ANSWER | USER | COMMENT
-------------------------------
1 |           | U1   | Haubtkommentar
2 |         1 | U2   | Antwort auf (1)
3 |         2 | U1   | Meine Auntwort auf (2)

Im Endeffekt hast du also ein Adjacency Tree. Dzu hatte ich mal was geschrieben
http://wiki.yaslaw.info/dokuwiki/doku.php/mysql/adjacencytree/index#alle_unterordner_einer_id
 
Zurück