Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> SQL: Top 10 Nutzer mit bestbewertetsten Bildern, Group By + Aggregat über zwei Tabellen
pangu
Geschrieben am: Mi 27.06.2007, 14:46
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 833
Mitglied seit: 29.07.2005


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


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
 
Duvi
#2 Geschrieben am: Mi 27.06.2007, 15:13 (+00:26)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 489
Mitglied seit: 4.10.2006


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!!!
Top
PMEmail Poster
Top
 
Maik
power-labels AG
#3 Geschrieben am: Mi 27.06.2007, 19:18 (+04:05)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 477
Mitglied seit: 16.03.2006


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...


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#4 Geschrieben am: Mi 27.06.2007, 20:29 (+01:10)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2204
Mitglied seit: 4.02.2006


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).


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
pangu
#5 Geschrieben am: Mi 27.06.2007, 20:47 (+00:18)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 833
Mitglied seit: 29.07.2005


@jAuer: so funktioniert es, vielen dank smile.gif


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/19119

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
AdSense mit Bildern verursachte 400% mehr Einnahme woody 811 7 So 30.03.2008, 22:53
Schweiz: 1 Jahr Gefängnis für P2P-Nutzer Joel 1297 11 Sa 8.12.2007, 12:16
Ausrichten von Bildern Peter Schneider 287 3 So 18.03.2007, 11:22
Abmahnung für Web1 Confixx-Nutzer HoBbY 1184 20 Di 6.03.2007, 19:35
YouTube will Nutzer mitverdienen lassen benny 1891 13 So 25.02.2007, 12:01
www art project mit ca. 200 bildern von jedem land Liebenwald 447 2 Sa 6.01.2007, 21:12
Manipulationen an Bildern... TheGamer1701 471 3 Di 17.10.2006, 22:17
Für alle Fußballfreax und Firefox Nutzer Seev 351 0 Fr 12.05.2006, 13:52
Resizing von hochgeladenen Bildern PH 620 7 Mi 28.12.2005, 09:30
Darstellung von Erotik Bildern / AVS? seo-consulting 4340 5 So 9.10.2005, 12:26




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]