Kleines Problem mit SQL-Abfrage

Eistee

Erfahrenes Mitglied
Hi, ich hab nen (kleines?) Gallery-Script geschrieben.
Funktioniert soweit auch wunderbar :)

Eine zentrale Funktion des Scriptes ist, dass man alle Bilder auch bewerten kann (mit Punkten von 1 bis 5).
In der DB, in der alle Bilder und die zugehörigen Infos, gespeichert sind gibt es für diesen Zweck zwei Spalten: "rating" und "clicks"
In der Spalte "rating" werden einfach alle Punkte, die für dieses Bild berreits vergeben wurden addiert.
In der Spalte "clicks" wird die Zahl aller bisherigen Votes für das Bild gespeichert.
So kann ich die durchschnittliche Punktzahl für das jeweilige Bild errechnen.
Soweit so gut :)

Auf der Startseite meiner Page möchte ich jetzt aber das Bild mit der besten Wertung anzeigen lassen - klappt eigentlich auch.
Das hab ich über diesen Code realisiert:
Code:
SELECT *, (rating/clicks) as 'av' FROM gallery ORDER BY 'av' DESC LIMIT 1

Nun endlich zu meinem Problem:
Angenommen es gibt zwei Bilder in der DB. Das erste Bild wurde zweimal mit 5 Punkten bewertet, das zweite Bild wurde nur einmal mit 5 Punkten bewertet.
Beide Bilder haben aber nun durchscnittlich 5 Punkte, was dazu führt, dass es reiner Zufall ist, welches der beiden Bilder nun als bestes angezeigt wird.

Wie könnt ich meine SQL-Abfrage so ändern, dass immer das Bild angezeigt wird, auf das auch die meisten Votes abgegeben wurden (in dem Beispiel das erste)?
Ich denke, es ist klar worauf ich hinaus möchte.
Hoffe, ihr könnt mir bei meinem Problem helfen.
 
Denk doch mal ein bisschen nach!
Division durch null!
Wo wird dividiert?
Richtig -> rating/clicks
Was ist der Nenner?
Richtig -> clicks
Und was wird demzufolge Null sein?
Richtig -> Das Feld 'clicks' ist für ein oder meherere Datensätze Null oder leer.

~ snuu ~
 
Zuletzt bearbeitet:
Les dir doch bitte mal die letzten beiden postings richtig durch :(
Ohne die Ergänzung von SilentWarrior funktioniert alles wunderbar, erst wenn ich
Code:
... ORDER BY 'av' ...
durch
Code:
... ORDER BY 'av', 'clicks' ...
ersetze, kommt es zu dieser Fehlermeldung.
Der Fehler muss demnach woanders liegen.
 
Jetzt bekomm ich zwar keine Fehlermeldung mehr, aber es wird das Bild als bestes angezeigt, welches von EINEM Besucher mit EINEM Punkt bewertet wurde :(
 
Code:
SELECT  * , ( rating / clicks ) AS  'av'
FROM gallery
WHERE clicks > 0
ORDER  BY av DESC ,  clicks DESC 
LIMIT 1
 
Zuletzt bearbeitet:
Hab ich grad auch probiert :)
Code:
SELECT *, (rating/clicks) as 'av' FROM gallery ORDER BY 'av' DESC, 'clicks' DESC LIMIT 1
Funktioniert auch ohne "... WHERE clicks > 0 ..."
Trotzdem danke für deine Bemühungen.

Könnt ich die Abfrage evtl. noch irgendwie optimieren?
 
Ich würde das "WHERE clicks > 0" aus Sicherheitsgründen beibehalten. Außerdem würde ich nur die Felder in das SELECT mit aufnehmen, die ich auch benötige.

snuu
 
Zurück