COUNT / GROUP BY und WHERE

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

  • COUNT / GROUP BY und WHERE

    Hallo Forum,

    ich habe folgendes Problem uud bin für jeden Tipp dankbar. Ich habe eine Datenbanktabelle, in der Filmbewertungen gespeichert sind. Dass heisst genauer:

    Ein registrierter User kann auf meiner Seite Filme bewerten. Beim absenden einer Bewertung (zwischen 1 und 10) wird diese in die Datenbank übertragen. Nun möchte ich eine Art TopListe erstellen. Die Abfrage, die ich dazu bisher gemacht habe, lautet wie folgt:

    SELECT ROUND(AVG(bew.bewertung)) AS durchschnitt, COUNT(bew.id) AS anzahl, film.* FROM tbl_filme_bewertungen bew LEFT JOIN tbl_filme film ON film.id = bew.film_id GROUP BY bew.film_id ORDER BY durchschnitt DESC LIMIT 0,10

    Das funktioniert alles wunderbar. Die besten 10 Filme in der Datenbank werden ausgelesen. Es bleibt lediglich ein kleiner Schönheitsfehler. Und zwar sollte ein Film erst dann in die Top 10 aufgenommen werden, wenn mindestens 5 Bewertungen eingeganzen sind, also COUNT(bew.id) AS anzahl sozusagen >= 5 ist. Leider kann ich das nicht als WHERE-Klausel in die Abfrage einbauen, weil anzahl kein Datenbankfeld ist und ich dann einen Fehler bekomme.

    Hat jemand eine Idee, wie man die Beschränkung auf 5 oder mehr Bewertungen (sprich Datensätze pro Film) in die Abfrage übernehmen kann ? Gerne auch Ideen mit anderen Abfragen.

    Vielen Dank ...

  • #2
    Okay,

    nach langer Suche bin ich dann doch noch fündig geworden. Es geht ganz einfach mit dem oft gehörten und selten genutzen HAVING. Muss das in den letzten Jahren wohl einfach zu selten benutzt und verdrängt haben.

    Die funktionierende Abfrage lautet

    PHP-Code:
    SELECT AVG(bew.bewertung) AS durchschnitt,
    COUNT(bew.id) AS anzahlfilm.* FROM tbl_filme_bewertungen bew
    LEFT JOIN tbl_filme film ON film
    .id bew.film_id GROUP BY bew.film_id HAVING anzahl >= 5
    ORDER BY durchschnitt DESC LIMIT 0
    ,10 

    Kommentar

    Lädt...
    X