Hi noch einmal, habe mir die erste Seite komplett durchgelesen,die Joins sind mir jetzt einwenig klarer.
Hab zu Testzwecken drei Tabellen angelegt:
CREATE TABLE test\_news (
newsid int(11) NOT NULL auto_increment,
thema varchar(250) default '',
hits int(11) default 0,
kommentare int(11) default 0,
kategorie int(11) default 0,
PRIMARY KEY (newsid),
INDEX (newsid)
) ;
CREATE TABLE test\_newscomments (
commentid int(11) NOT NULL auto_increment,
newsid int(11) default 0,
userid int(11) default 0,
kommentar varchar(250) default '',
PRIMARY KEY (commentid),
INDEX (newsid)
) ;
CREATE TABLE test\_user (
userid int(11) default 0,
username varchar(250) default '',
geschlecht int(11) default 0,
PRIMARY KEY (userid),
INDEX (userid)
) ;
###############################################################################
Zwei Nachrichten in die Newstabelle
INSERT INTO test\_news ( newsid , thema , hits , kommentare , kategorie ) VALUES ('', 'EU Krise', '10', '2', '3');
INSERT INTO test\_news ( newsid , thema , hits , kommentare , kategorie ) VALUES ('', 'Liebe', '5', '0', '3');
Zwei Kommentare nur für die erste News
INSERT INTO test\_newscomments ( commentid , newsid , userid , kommentar ) VALUES ('', '1', '12345', 'Das ist Schade');
INSERT INTO test\_newscomments ( commentid , newsid , userid , kommentar ) VALUES ('', '1', '67890', 'Wird schon wieder');
Zwei USer in der Usertabelle
INSERT INTO test\_user ( userid , username , geschlecht ) VALUES ('12345', 'Lisa', '1');
INSERT INTO test\_user ( userid , username , geschlecht ) VALUES ('67890', 'Udo', '2');
Folgende Joins sind mir klar. Er führt beide Tabellen zusammen, falls das Kriterium "A.newsid=B.newsid" passt. Es wird die erste News 2 Mal aufgelistet, da 2 Kommentare.
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid FROM test_news AS A INNER JOIN test_newscomments AS B on A.newsid=B.newsid;
Left Join. Er listet auf alle Fälle die Datensätze von der Linken Tabelle auf, falls das Kriterium "A.newsid=B.newsid" passt, fügt er noch die Kommentare dazu, ansonsten werden diese Felder mit NULL aufgefüllt. Es wird die erste News 2 Mal aufgelistet, da zwei Kommentare und einmal die zweite News mit NULL-Felder, da keine Kommentare
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid FROM test_news AS A LEFT JOIN test_newscomments AS B on A.newsid=B.newsid;
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;
Er sollte jedoch die zweite News ohne Kommentare auch auflisten.