• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

mySQL join mit left join kombinieren?

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!
 
Mitglied seit
15.03.2002
Beiträge
400
Reaktionen
0
ähhhh ok ich habs ^^

nur left joins funzen:
SELECT news.ID, news.newstext, news.newsdate, news.newstime, news.head, user.name, kats.katname, COUNT(comment.ID) AS sumcom
FROM news LEFT JOIN user ON user.ID = news.UID LEFT JOIN katlookup ON news.ID = katlookup.NID LEFT JOIN kats ON kats.ID = katlookup.KID LEFT JOIN comment ON news.ID = comment.NID
GROUP BY news.ID
ORDER BY news.newsdate DESC, news.newstime DESC;




trotzdem würde mich interessieren, ob eine kombination der joins möglich ist!
 
Mitglied seit
03.08.2002
Beiträge
3.257
Reaktionen
14
was anderes:

ich würde die anzahl der comments direkt in die news schreiben.
wenn die seite halbwegs gut besucht ist und auch ein paar mehr news existieren, ist das deutlich serverschonender.
 
Mitglied seit
15.03.2002
Beiträge
400
Reaktionen
0
ja das hatte ich mir auch überlegt. aber es ist halt meine erste php seite und sie ist eben nicht gut besucht ^^
dienst nur als clanpage für meinen dotaclan. da schauen hauptsächlich die member und einige wenige gäste drauf.
 
Oben