Hallo
Hi noch einmal, habe mir die erste Seite komplett durchgelesen,die Joins sind mir jetzt einwenig klarer.
und warum noch nicht den Artikel, der sich mit Mehrfachjoins befaßt?
CREATE TABLE
test\_news
(
newsid
int(11) NOT NULL auto_increment,
) ;
[...]
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 :-)
Wenn ich nun drei Tabellen verbinde, hakt es bei mir. Liste alle News von test_news auf. Falls Kommentare vorhanden hole noch die Kommentare mit Userangaben. Hier listet er nur die ersten Beiden News auf.
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid, C.username FROM test_news AS A LEFT JOIN test_newscomments AS B on A.newsid=B.newsid INNER JOIN test_user AS C on B.userid=C.userid;
Du möchtest also alle Beiträge und falls es noch Kommentare gibt, die entsprechenden Informationen aus der Kommentar- und Benutzertabelle?
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.
Bei Datenbankfragen, insbesondere bei MySQL, ist es sehr wichtig, das verwendete DBMS *und* die verwendete Version anzugeben.
Freundliche Grüße
Vinzenz