SQL fuer JOIN

Bicko

Erfahrenes Mitglied
Hi,

ich habe mich erneut festgebissen und hoffe das jemand helfen kann.

Habe 2 Tabellen. Tab1 stehen News drin, Tab2 stehen Kommentare zu den News.

Nun moechte ich gerne aus Tab1 alle Newstitel auslesen und per Join die passenden Kommentare zaehlen, die dann in Klammern unter dem Titel stehen.

Eigentlich kein Problem, nur das News und Kommnetare auch offline sein koennen. Es duerfen also nur die News angezeigt werden, die auch online sind und nur die Kommentare gezaehlt werden, die auch online sind.

PHP:
$sql="SELECT COUNT(CommentID) as CommentsAmount,  tblArticles.ArticleTitle
 FROM tblArticles 
LEFT JOIN tblComments ON tblArticles.ArticleID=tblComments.ArticleID WHERE
 tblArticles.ArticleStatus='Online'  GROUP BY tblArticles.ArticleID";

So zaehlt er alle Kommentare, auch wenn sie offline sind. Schreibe ich
AND tblComments.CommentStatus='Online'

stimmt zwar die Anzahl, aber es werden nur noch die News ausgegeben, die auch einen Kommentar haben. Das passt einfach nicht. Auch ein INNER oder RIGHT Join passt nicht.

Hat jemand einen Tip, wie man das elegant in einer Abfrage packen kann? Das muss doch gehen. Vielen Dank im Voraus.
 
Mmh, sorry aber das verstehe ich irgendwie nicht so ganz. Wo soll denn da ein Or CommentsAmount = 0 rein?

PHP:
$sql="SELECT COUNT(CommentID) as CommentsAmount,  tblArticles.ArticleTitle 
 FROM tblArticles  
LEFT JOIN tblComments ON tblArticles.ArticleID=tblComments.ArticleID WHERE 
 tblArticles.ArticleStatus='Online' 
OR CommentsAmount=0 
AND tblComments.CommentStatus='Online'    
GROUP BY tblArticles.ArticleID";

Vielleicht so? Kann es jetzt leider nicht testen, da ich nicht mehr auf der Arbeit bin, aber meinst Du so? Vielen Dank.
 
ich glaube so sollte es gehen

SQL:
SELECT COUNT(CommentID) as CommentsAmount,  tblArticles.ArticleTitle 
 FROM tblArticles  
LEFT JOIN tblComments ON tblArticles.ArticleID=tblComments.ArticleID WHERE 
 tblArticles.ArticleStatus='Online'  AND tblComments.Commentstatus ='Online'
GROUP BY tblArticles.ArticleID
durch den Leftjoin hat er ja nur die Artikel drin welche auch online sind. Damit auch die Comments auf online geprüft werden muss das eigentlich nur wie oben erweitert werden.

Grüsse bb
 
Du musst immer nach den Werten Gruppierun, die Gruoppierungsfunktion nutzen, in diesem Fall wäre das dann tblArticles.ArticleTitle
 
Zurück