MySQL left join Problem
Felix2
- datenbank
0 hawkmaster0 Felix20 hawkmaster0 Rouven
Hallo Leute,
ich habe ein Problem mit einer MySQL-Abfrage.
In der Haupttabelle werden Bildergalerien gespeichert. Dazu gibt es je eine Tabelle für die enthaltenen Bilder und die zugehörigen Kommentare. Wie kann ich nun ein select einrichten, der mir alle Galerien samt der jeweilige Zahl von Bildern und Kommentaren ausgibt?
Mit zwei Tabellen ist das ja kein Problem:
select galerie.titel,count(bilder.id) as galerie.bilderzahl from galerie left join bilder on galerie.id=bilder.galerie group by galerie.id
dasselbe für die Kommentare:
select galerie.titel,count(kommentare.id) as galerie.kommentarzahl from galerie left join kommentare on galerie.id=kommentare.galerie group by galerie.id
Wenn ich die beiden kombiniere, kommt aber murks raus:
select galerie.titel,count(bilder.id) as galerie.bilderzahl,count(kommentare.id) as galerie.kommentarzahl from galerie left join bilder on galerie.id=bilder.galerie left join kommentare on galerie.id=kommentare.galerie group by galerie.id
Kann hier jemand weiterhelfen?
Hallo
Wenn ich die beiden kombiniere, kommt aber murks raus:
was heisst bei dir "murks"?
Kommen fasche Ergebnisse zurück?
Kommt nichts zurück?
viele Grüße
hawk
Hallo
Wenn ich die beiden kombiniere, kommt aber murks raus:
was heisst bei dir "murks"?
Kommen fasche Ergebnisse zurück?
Kommt nichts zurück?viele Grüße
haw
die beiden count-werte werden multipliziert in beiden spalten zurückgegeben.
Hallo
ohne deine genaue Tabellenstruktur zu kennen.
Ich habe mal dein Beispiel nachgebaut bei mir.
Eine Abfrage mit:
select bildergalerie.titel,count(bilder.BilderID) as bilderzahl,count(kommentare.KommentareID) as kommentarzahl from bildergalerie left join bilder on bildergalerie.BildergalerieID=bilder.BildergalerieID left join kommentare on bildergalerie.BildergalerieID=kommentare.BildergalerieID group by bildergalerie.BildergalerieID
bringt mir das gewünschte ergebnis
viele Grüße
hawk
Hello,
Eine Abfrage mit:
select bildergalerie.titel,count(bilder.BilderID) as bilderzahl,count(kommentare.KommentareID) as kommentarzahl from bildergalerie left join bilder on bildergalerie.BildergalerieID=bilder.BildergalerieID left join kommentare on bildergalerie.BildergalerieID=kommentare.BildergalerieID group by bildergalerie.BildergalerieID
eieiei, das muss ein MySQL sein...
SELECT mit GROUP BY darf nur Spalten selektieren, die entweder eine Aggregation für die Gruppe unterliegen (hier: bilderzahl, kommentarzahl) oder nach denen gruppiert wurde. Hier widerspricht sich ID und Titel. Wenn der Titel gewünscht ist, sollte auch nach genau dem gruppiert werden.
MfG
Rouven
--
\-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))
Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist -- Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1