Vinzenz Mai: Verständnisfrage JOIN's

Beitrag lesen

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