Hallo,
Wie schon gesagt, ich will die Anzahl der Kommentare (jeder hat eine parent_id, die zu einer News gehört) in num_comments stehen haben. Ein Query hätte ich da schon: Aber es liefert mir sehr seltsame Zahlen für num_comments -
Du hast anscheinend noch immer nicht die Geschichte mit den Joins verstanden
ich hab schon alles ausprobiert, aber ich schaffs einfach nicht :(
.. nur die richtige VAriante noch nicht;-)
SELECT n.id, n.headline, n.content, n.author_id, n.timestamp, u.username, count(c.parent_id) AS num_comments
bis hier her stimmt's ja schon einmal.
FROM al_news n, al_users u, al_news n2
wozu diese Liste von Tabellen?
und wozu brauchst Du n2?
Dir ist scheinbar nicht bewußt das diese Liste Kreuzprodukte erzeugt, d.h. die Ergebnismenge enthält (ohne weitere Maßnahmen) eine kombination aus allen beteiligten Tabellen, wobei die Anzahl der Datensätze aus diesen Tabellen mit einander multipliziert werden. bei drei Tabellen mit je 100 Datensätzen ergibt das eine Ergebnismenge mit 1 Million Datensätzen.
LEFT JOIN al_comments c ON n2.id = c.parent_id
Gut im Ansatz nur nicht fertiggemacht.
WHERE (n.author_id = u.id)
Auch eine Möglichkeit einen Join zu realisieren, sollte aber nur gemacht werden, wenn die Dtaenbank keine echten Joins kann.
GROUP BY c.parent_id
Ups, da hast Du die vollkommen falsche spalte erwischt;-)
Lies nochmals sorgfältig meine Ausführungen in [pref:t=40339&m=221252] durch.
Probier mal:
SELECT n.id, n.headline, n.content, n.author_id,
n.timestamp, u.username, count(c.parent_id) AS num_comments
FROM al_news n
JOIN al_users u ON n.author_id = u.id
JOIN al_comments c ON n.id = c.parent_id
GROUP BY n.id, n.headline, n.content, n.author_id, n.timestamp, u.username
Grüße
Klaus