Felix2: MySQL left join Problem

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?

  1. 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

    1. 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.

      1. 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

        1. 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