- Mitglied seit
- 15.03.2002
- Beiträge
- 400
- Reaktionen
- 0
Ich habe eine seite zum Newsposten und will nun comments zu den news hinzufügen. Auf der newsseite soll die anzahl der comments angezeigt werden, die zu jeder News verfügbar sind, aber ich habe probleme mit der SQL abfrage (schon recht komplex). Ich habe eine Tabelle "news" in der die wichtigstens daten zu den news sind. Außerdem ziehe ich Informationen über den Ersteller und die Kategorie aus den Tabellen "kats", "katlookup" und "user". Dazu mache ich einen join der tabellen. Das funktioniert auch alles! Jedoch wenn noch die Anzahl der Comments dazu kommt, wird es schwierig...
Meiner Meinung nach wichtige Stellen sind fett markiert:
SELECT news.ID, news.newstext, news.newsdate, news.newstime, news.head, user.name, kats.katname, COUNT(comment.ID) AS sumcom
FROM news, user, katlookup, kats, comment
WHERE user.ID = news.UID AND news.ID = katlookup.NID AND kats.ID = katlookup.KID AND news.ID = comment.NID
GROUP BY news.ID
ORDER BY news.newsdate DESC, news.newstime DESC;
Diese Abfrage gibt nun alle News aus, die schon Comments haben. Aber news bei denen "COUNT(comment.ID) AS sumcom" 0 ergibt werden einfach ausgelassen. Ein schlaues buch sagt dazu, dass man einen Left Join verwenden soll. Allerdings benötige ich für die Kategorie und Userabfrage ja normale Joins und zusammen wollen die irgendwie nicht funktionieren. Wenn ich also in der FROM Zeile ", comment" durch "LEFT JOIN comment ON comment.NID = news.ID" ersetze und den teil "AND news.ID = comment.NID" weglasse kommt folgende Fehlermeldung:"#1054 - Unknown column 'news.ID' in 'on clause' "
Der Left join an sich funktioniert:
SELECT news.ID, newstext, newsdate, newstime, head, COUNT(comment.ID) AS sumcom
FROM news LEFT JOIN comment ON comment.NID = news.ID
GROUP BY news.ID ORDER BY newsdate DESC, newstime DESC;
Aber so fehlen wieder die Infos von den normalen joins ...
Kann mir jemand helfen??? Vielen Dank im Vorraus!
Meiner Meinung nach wichtige Stellen sind fett markiert:
SELECT news.ID, news.newstext, news.newsdate, news.newstime, news.head, user.name, kats.katname, COUNT(comment.ID) AS sumcom
FROM news, user, katlookup, kats, comment
WHERE user.ID = news.UID AND news.ID = katlookup.NID AND kats.ID = katlookup.KID AND news.ID = comment.NID
GROUP BY news.ID
ORDER BY news.newsdate DESC, news.newstime DESC;
Diese Abfrage gibt nun alle News aus, die schon Comments haben. Aber news bei denen "COUNT(comment.ID) AS sumcom" 0 ergibt werden einfach ausgelassen. Ein schlaues buch sagt dazu, dass man einen Left Join verwenden soll. Allerdings benötige ich für die Kategorie und Userabfrage ja normale Joins und zusammen wollen die irgendwie nicht funktionieren. Wenn ich also in der FROM Zeile ", comment" durch "LEFT JOIN comment ON comment.NID = news.ID" ersetze und den teil "AND news.ID = comment.NID" weglasse kommt folgende Fehlermeldung:"#1054 - Unknown column 'news.ID' in 'on clause' "

Der Left join an sich funktioniert:
SELECT news.ID, newstext, newsdate, newstime, head, COUNT(comment.ID) AS sumcom
FROM news LEFT JOIN comment ON comment.NID = news.ID
GROUP BY news.ID ORDER BY newsdate DESC, newstime DESC;
Aber so fehlen wieder die Infos von den normalen joins ...
Kann mir jemand helfen??? Vielen Dank im Vorraus!