Hi vinzenz,
und warum noch nicht den Artikel, der sich mit Mehrfachjoins befaßt?
werde ich gleich nachholen und es mir anschauen.
Die schreckliche Backtickitis läßt auf MySQL schließen. Welche Version.
MySQL geht erst ab Version 5.0.12 einigermaßen vernünftig mit komplexeren Joins um. Vorher gibt's gern auch mal völlig falsche Resultate :-)
Lokal habe ich mySQL 5.0.15 und auf dem Server müsste es die 5.0.12 sein, wenn ich mich nicht täusche.
Du möchtest also alle Beiträge und falls es noch Kommentare gibt, die entsprechenden Informationen aus der Kommentar- und Benutzertabelle?
Genau, und mit Deiner Query klappt es auch optimal.
SELECT
news.thema, -- Aliasnamen bitte sinnvoll wählen
news.hits, -- A, B oder C sind keine sinnvollen Namen!
news.kommentare,
comments.kommentar,
comments.userid,
user.username
FROM
test_news news -- ich persönlich verzichte bei Aliasnamen für
-- Tabellen auf das Schlüsselwort AS, weil das
-- nicht jedes DBMS versteht :-)
LEFT JOIN (
test_newscomments comments
INNER JOIN
test_user user
ON
comments.userid = user.userid
)
ON
news.newsid = comments.newsid
>
> Beachte, dass MySQL < 5.0.x Klammern ignoriert.
> Beachte, dass MySQL < 5.0.12 ein falsches Ergebnis liefert.
>
Die Query ist auch recht einleuchtend für mich nun. Hole die oben aufgezählten Spalten von test\_news news (das zweite news ist dann wohl ein Alias, wobei ich das mit A, B und C etwas anschaulicher finde, ist aber mehr eine Geschmackfrage).
Alle Datensätze von test\_news werden ausgespuckt da LEFT JOIN. Und der rechte Teil wird nur befüllt, falls das Kriterium comments.userid = user.userid zutrifft.
Ob ich die anzahl der Kommentare in test\_news noch separat anlege, muss ich mir noch überlegen. Wahrscheinlich lösche ich es und berechne es immer mit Anhang von count(\*) damit es dann normalisiert ist.
Eine andere Frage, wenn ich dich schon an der Hotline habe. Ich hatte vor ein paar Tagen einen Thread gestartet, aber leider keine Antwort erhalten, ist mittlerweile auch schon im Archiv. http://forum.de.selfhtml.org/archiv/2008/2/t166515/#m1085967
Konnte ich mein Problem dort überhaupt verständlich erklären?
Hättest mir da nen kleinen Tipp?
Grüße