Einträge mit den meisten Votes ausgeben

Identität

Erfahrenes Mitglied
Hallo,
ich habe eine Tabelle "Bilder". Für die kann man voten. Bei jedem Vote wird unter "Votes" ein Eintrag mit "Bildnr" gemacht. Die Bildnr besitzt die ID aus der Tabelle "Bilder".

Nun möchte ausgeben, welche die 10 beliebtesten Bilder sind. Wie mache ich es denn? Ich habe gar keine Idee, habe mir schon Sachen wie Count() oder Group by() angsehen, aber verstehe das nicht ganz. Könnt ihr mir erklären, welche Funktionen ich verwenden kann. Evtl. habt ihr ja auch ein Beispiel zur Hand.

Vielen Dank :)
 
Hi,

Du gruppierst einfach nach Bild-ID und zählst die votes. Danach kannst Du ja sortieren.

Ungetestet:
Code:
SELECT bilder.id, COUNT(votes.id) FROM bilder
   JOIN votes ON(bilder.id = votes.bildnr)
   GROUP BY bilder.id
   ORDER BY COUNT(votes.id) DESC
   LIMIT 10

LG
 
Hallo kuddeldaddeldu,
das funktioniert perfekt. Genau so habe ich es übernommen :)

Wenn ich jetzt jedoch ein Bild mit 0 Stimmen habe wird es nicht aufgeführt. Ist für mich kein Problem, da beim anlegen eines Bilders, sofort ein Vote für den Ersteller vorgenommen wird, damit er nicht selbst für sein Bild stimmt (Gleichberechtigung, wenn jeder autoamtisch für sein Bild stimmt, also mit einem Vote startet.)

Also vielen Dank nochmal, fühl dich gedrückt von mir =)
 
Super :)

Aber jetzt noch eine ganz kurze Frage:
Wollte es erweitern, jedoch funktioniert die Where Abfrage nicht?

Code:
        $sql2 = "SELECT *, COUNT(*) FROM bilder
        LEFT JOIN votes ON(bilder.uid = votes.bilder)
        GROUP BY bilder.uid
        ORDER BY COUNT(votes.bilder) DESC
        LIMIT 9,7
        WHERE `bilder`.`time` > '".$gestern."'";

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `bilder`.`time` > '1223842310'' at line 6
 
Ich habe die WHERE Abfrage gestern überall hingestellt, hat aber nicht geklappt. Jetzt habe ich es nochmal probiert und es läuft. Danke, du bist echt super!
 
Zurück