INNER JOINS und Fehler #1111 - Invalid use of group function

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • INNER JOINS und Fehler #1111 - Invalid use of group function

    Code:
    SELECT stories_kapitel.kapitel_id, stories_kapitel.story_id, stories_kapitel.reihenfolge, 
    stories.user_id, stories.titel, stories.fandom, stories.sprache, stories.pairing, stories.einstufung, stories.status, users.user, 
    fandoms.fandom_name, einstufungen.einstufung_name, SUM( stories_bewertungen.bewertung ) / COUNT( stories_bewertungen.bewertung ) AS bewertungen_summe
    FROM stories
    INNER JOIN stories_kapitel ON stories_kapitel.story_id = stories.story_id
    INNER JOIN users ON stories.user_id = users.id
    INNER JOIN fandoms ON stories.fandom = fandoms.fandom_id
    INNER JOIN einstufungen ON stories.einstufung = einstufungen.einstufung_id
    INNER JOIN stories_bewertungen ON stories_bewertungen.story_id = stories.story_id
    WHERE COUNT( stories_bewertungen.bewertung ) >
    10 GROUP BY stories.datum ORDER BY bewertung_durchschnitt DESC LIMIT 10
    Hallöchen

    Über diesem Text findet ihr eine SQL anweisung und im Betreff findet man auch die Fehlermeldung die hieraus ergeht.

    Was ich mit dem Statement befolgen will ist folgendes. Ich will die selektierten Storydaten, Kapiteldaten, Einstufungsdaten, Fandomdaten, sowie die Bewertungen ausgeben rausbekommen.

    Am wichtigsten ist mir hierbei, dass die ganzen Bewertungen, die es zu einer Story gibt zusammengezählt werden und durch die Anzahl der Bewertungen geteilt wird um den Durchschnitt zu bekommen. In der ORDER BY Klausel will ich, dass die Storys in der Reihenfolge anzeigt, die mehr als 10 Bewertungen bekommen haben und die anderen außen vorlässt. Es geht darum, dass ich eine Tabelle brauche, die mir die 10 besten Storys ausliefert, die 10 oder mehr Bewertungen haben. Ist den das Statement soweit richtig?

    Achja und wo liegt der Fehler?

    Danke schonmal im Vorraus.
    Zuletzt geändert von Tiger_XT; 22.12.2006, 22:04.

  • #2
    Du kannst COUNT nicht in einer WHERE-Klausel verwenden. Schau dir vielleicht mal HAVING an.
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Code:
      SELECT stories_kapitel.kapitel_id, stories_kapitel.story_id,
       stories_kapitel.reihenfolge, stories.user_id, stories.titel,
       stories.fandom, stories.sprache, stories.pairing, stories.einstufung,
       stories.status, users.user, fandoms.fandom_name,
       einstufungen.einstufung_name, SUM( stories_bewertungen.bewertung ) / COUNT( stories_bewertungen.bewertung ) AS bewertungen_summe
      FROM stories
      INNER JOIN stories_kapitel ON stories_kapitel.story_id = stories.story_id
      INNER JOIN users ON stories.user_id = users.id
      INNER JOIN fandoms ON stories.fandom = fandoms.fandom_id
      INNER JOIN einstufungen ON stories.einstufung = einstufungen.einstufung_id
      INNER JOIN stories_bewertungen ON stories_bewertungen.story_id = stories.story_id
      GROUP BY stories.datum
      HAVING COUNT( stories_bewertungen.bewertung ) >10
      ORDER BY bewertungen_summe DESC
      LIMIT 10
      So, erstmal danke für den Tipp, der hat mir schon sehr geholfn. Jetzt bekomme ich auch results, nur leider nicht genau das was ich suche. Irgendwo muss noch ein Fehlerchen sein, habe jetzt schon alles durchsucht, aber irgendwie ist das Statement logisch für mich, aber er gibt mir auch ergebnisse aus, wo es weniger als 10 Bewertungen zu einer Story gibt -.-

      Kommentar


      • #4
        Du solltest nach allen single cols gruppieren.
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Was verstehst du unter Single Columns?

          Kommentar


          • #6
            Code:
            SELECT COUNT( stories_bewertungen.user_id ) AS bewertungen_gesamt, 
            SUM( stories_bewertungen.bewertung ) / COUNT( stories_bewertungen.user_id ) AS bewertungen_durchschnitt, 
            stories.story_id, stories.user_id, stories.titel, stories.fandom, stories.sprache, stories.pairing, 
            stories.einstufung, stories.status, users.user, fandoms.fandom_name, 
            einstufungen.einstufung_name, stories_kapitel.kapitel_id
            FROM stories
            INNER JOIN stories_bewertungen ON stories_bewertungen.story_id = stories.story_id
            INNER JOIN users ON stories.user_id = users.id
            INNER JOIN fandoms ON stories.fandom = fandoms.fandom_id
            INNER JOIN einstufungen ON stories.einstufung = einstufungen.einstufung_id
            INNER JOIN stories_kapitel ON stories.story_id = stories_kapitel.story_id
            WHERE stories_kapitel.reihenfolge =1
            GROUP BY stories.datum
            HAVING COUNT( stories_bewertungen.bewertung ) >10
            ORDER BY bewertungen_durchschnitt, bewertungen_gesamt DESC
            LIMIT 10
            So habs hinbekommen und gleich noch das Statement eingefügt, so das es meinen Bedürfnissen entspricht und funktioniert

            Kommentar

            Lädt...
            X