Abfrage gemischter Datentypen

Hallo HaBo,

folgende Situation:
Ich habe 3 Tabellen...
- page_news
- page_users
- page_comments
... und will bestimmte Felder aus der page_news auslesen. In der page_news steht nur eine ID fuer den Benutzer, welche mit den Benutzerinformationen aus der page_users verknuepft ist. Soweit ist das kein Problem, Abfrage funktioniert mit einer WHERE-Anweisung einwandfrei.
Jetzt will ich allerdings die Anzahl der Kommentare des jeweiligen Beitrages auslesen. Die Abfrage einfach um ein 'COUNT(page_comments.*) AS count' ... 'WHERE page_comments.news_id = page_news.id' zu erweitern funktioniert leider nicht.
Auch ein LEFT JOIN bekomme ich nicht zum Laufen. Ich such schon seit 2 Stunden nach dem Fehler, kann aber keinen entdecken. Dazu kommt, dass ich mir nicht sicher bin, an welche Stelle das LEFT JOIN gehoert, wenn ich noch weitere einschraenkungen wie LIMIT oder WHERE benutze.
Waere nett, wenn ihr da mal einen Blick drauf werfen wuerdet, vielleicht seht ihr den Fehler ja sofort.

Die Abfrage:
Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	COUNT(page_comments.*) AS cnt
FROM
	page_news,
	page_users
LEFT JOIN
	page_comments
ON
	page_comments.news_id = page_news.id
WHERE
	page_news.user_id = page_users.id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5

Ach ja: wenn man kein LEFT JOIN benutzt sondern nur die WHERE-Anweisung (wenn ich mich nicht irre ist das gleich einem JOIN), zeigt er nur die Eintraege an, wo Kommentare existieren.

mfg
snoggo
 
WIe wär's damit (ungetestet):

Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	COUNT(page_comments.*) AS cnt
FROM
	page_news
LEFT JOIN
	page_users ON page_news.user_id = page_users.id
LEFT JOIN
	page_comments ON page_comments.news_id = page_news.id
GROUP BY
	page_comments.news_id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5

Für COUNT() in Verbindung mit normalen Feldern wird noch eine GROUP BY Klausel benötigt, sonst weiß MySQL ja nicht, welche Werte eigentlich gezählt werden sollen.
 
Leider nicht. Danke fuer den Versuch ;)

Die Beziehungen:
page_news enthaelt eine eindeutige id.
page_news enthaelt eine user_id, die mit einer 1:1-Verbindung einem Eintrag aus page_users zugeordnet wird. Das ist kein Problem.
page_comments enthaelt eine news_id, es koennen n Eintraege aus page_comments einem Eintrag aus page_news zugeordnet werden.

Ich komm nicht weiter :(
 
und das ganze über nen extra query?
sowas in die richtung?

Code:
SELECT
	page_news.id AS id,
	page_news.date AS date,
	page_news.user_id AS user_id,
	page_news.title AS title,
	page_news.text AS text,
	page_news.image AS image,
	page_news.image_title AS image_title,
	page_users.username AS user_name,
	(SELECT COUNT(*) FROM page_comments WHERE page_comments.news_id = page_news.id) as cnt
FROM
	page_news
LEFT JOIN
	page_users ON page_news.user_id = page_users.id
LEFT JOIN
	page_comments ON page_comments.news_id = page_news.id
GROUP BY
	page_comments.news_id
ORDER BY
	page_news.id DESC
LIMIT
	0, 5
 
Zurück
Oben