SQL: Top 10 Nutzer mit bestbewertetsten Bildern

pangu

Angesehenes Mitglied
habe folgende struktur:

user:
id | nick | ...

bilder:
id | userid | votes | ...

~~~

wie kann ich jetzt die top 10 der user mit den bestbewertesten bildern auslesen?

also er soll nacheinander alle votes der bilder eines users auslesen, summieren und dann die durchshnittsbewertung der bilder dieses users ermitteln. die 10 user mit den durchschnittlich bestbewertesten bildern sollen ausgegeben werden.

-> wie frage ich das in mysql ab? thx

mein ansatz:
SELECT user.nick FROM user INNER JOIN bilder ON bilder.id = user.id GROUP BY user.id ORDER BY AVG (bilder.votes) DESC

ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ...

-> weiß jmd. wie man das macht? thx
 
meines wissens kann mysql kein order über eine funktion.

du müsstest also:
select avg(bilder.votes) as mittelwert
....
order by mittelwert

verwenden.


versuch mal:
select distinct u.nick, b.id, avg(b.votes) as mittelwert
from user u, bilder b
where u.id = b.userid
order by mittelwert desc

ungetestet!!!
 
QUOTE SELECT user.nick FROM user INNER JOIN bilder ON bilder.id = user.id GROUP BY user.id ORDER BY AVG (bilder.votes) DESC


ein kleiner Logikfehler in der ON-Klausel... du joinst die ID des Bildes auf die ID des Benutzers, denke mal du meintest es so:


CODE SELECT user.nick FROM user INNER JOIN bilder ON bilder.userid = user.id GROUP BY user.id ORDER BY AVG (bilder.votes) DESC



meine vorgehensweise würde ungefähr so aussehen:


CODE SELECT u.nick, AVG(b.votes) as avgvotes FROM bilder b LEFT JOIN user u ON u.id=b.userid GROUP BY u.id ORDER BY avgvotes DESC


keine Ahnung ob's stimmt...
 
QUOTE (pangu @ Mi 27.06.2007, 14:46)ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ...

Nach meinen sehr bescheidenen PHP-Kenntnissen heißt das, daß die Abfrage mindestens einen Syntaxfehler hatte. Sprich: Teste die Abfrage zunächst interaktiv, um genauere Fehlermeldungen zu kriegen, bevor Du sie in PHP einbettest.

Und dann gilt (zumindest beim ANSI-Standard): Wenn gruppiert/aggregiert wird, dann müssen Ausgabespalten entweder in Aggregatfunktionen verwendet werden oder in der Group By - Klausel auftauchen. Das fehlt bei den beiden bis jetzt geposteten Lösungen.


CODE Select A.nick, AVG(B.votes) As Bewertung
From user As A Inner Join bilder As B
On A.id = B.userid
Group By A.nick
Order By Bewertung Desc


Das geht auf dem MS-SqlServer. Falls mySql eine Sortierung nach dem Aliasnamen nicht zuläßt, müßte man das über eine Unterabfrage machen (die von älteren mySql nicht unterstützt wird).
 
@jAuer: so funktioniert es, vielen dank
smile.gif
 
Zurück
Oben