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.