Problem mit MySQL Query von 2 Tabellen

sasuki

Grünschnabel
hi,

Ich baue gerade an einem NewsSystem.

Auf der NewsSeite sollen 15 News angezeigt werden,
Code:
SELECT * FROM news LIMIT 1, 16 // Muss für alle News nur einmal abgefragt werden
Zu jeder News soll auch angezeigt werden wie viele Kommentare schon geschrieben wurden.
Code:
SELECT COUNT(id) FROM kom WHERE newsid = '$newsid' // Muss für jede News einzelnd abgefragt werden. $newsid steht für die ID der News.
Es ist aber schon Irgendwie dumm wenn da jetzt 15 Querys extra wegen sowas abgefragt werden müssen,
hab darum ein bischen probiert, und es kam das raus:
Code:
SELECT news. * , COUNT( kom.id )  AS  'koms', kom.newsid FROM news, kom WHERE kom.newsid = news.id GROUP  BY news.id LIMIT 0 , 16

// Hab keine Ahnug was GROUP BY bedeutet, stand in der doku von MySQL, sonst würde COUNT hier nicht funktionieren

Das funktionierte eigentlich auch, es werden aber nur die news angezeigt die schon Kommentare hatten.

Gibt es keine Möglichkeit das wenn keine Kommentare zur News vorhanden sind, bei koms (Anzahl der Kommentare) 0 steht?

danke

sasuki
 
Zuletzt bearbeitet:
Hi, wie wärs mit einem INNER JOIN.

Findest Du auch in den mysql manuals.

Damit kannste zum Beispiel 2 Tabellen zusammenabfragen.
Danach kannste dann in einer while-Schleife dir die News ausgeben lassen.

Hoffe ich konnte dir helfen.
 
hallo,

danke erstmal für die antwort.

Zurzeit sieht es so aus:
Code:
SELECT a. * , COUNT( b.id ) AS 'komids'
FROM news a, kom b
RIGHT JOIN kom ON b.newsid = a.id
GROUP BY a.id
LIMIT 0 , 16

bei den news dir 0 kommentare haben, steht hier 0.
Bei den anderen ist die zahl der komentare immer mit 72 malgenommen


danke

sasuki
 
Zuletzt bearbeitet:
So, ich glaub so gehts....

SELECT a.* , COUNT( b.id ) AS 'komids'
FROM news a
INNER JOIN kom b ON b.newsid = a.id
ORDER BY a.id
ASC LIMIT 0 , 16

;) Ansonsten sollte es jetzt funzen, wenn nicht poste mal bitte den php code, die tabellen und spalten namen deiner db.
 
danke,

funktionierte mit dem da:
Code:
SELECT
	a.*,
	COUNT(b.id) as 'koms'
FROM
	news a
LEFT JOIN
	kom b ON b.newsid = a.id
GROUP BY
	a.id
LIMIT
	0,
	16

vielen dank, hat mir sehr geholfen,
ladezeitunterschied ist deutlich (0,01 sec)

mfg

sasuki
 
Zuletzt bearbeitet:
PHP:
SELECT news_id,news_author_id,news_ueberschrift,news_text,team_name FROM news LEFT JOIN team ON team.team_id=news.news_author_id ORDER by news.news_id DESC

wäre jetzt bei diesem Beispiel noch ein Zählen der Kommentare per Group möglich?
 
Hi, ich glaube das sollte mir gelten *g*

Also ich mache es immer so, das ich eine Variable $query habe.

PHP:
<?
         $query = (" SELECT * FROM tabelle ");

?>

Dieses lass ich dann per mysql query ausgeben und mache danach noch einen mysql num rows, oder ich lege in der ausgabeschleife eine Variable $i an und lass die hochzählen.

Ob nu Mysql auch in diesem Statement zählen kann, weiß ich nicht, dafür arbeite ich mit mysql zu wenig. Ich benutze meistens ODBC und Sybase SQL und da kennt er so einiges nicht.

Naja hoffe konnte Dir helfen.
 
Zurück