Top 10 Funktion

DiDiJo

Erfahrenes Mitglied
Hey Leute,

ich arbeite gerade an einer Streamingsite für Videos á la youtube.

Bis jetzt bin ich gar gut voran gekommen aber nun hänge ich an meiner Top Ten Funktion.

Ich habe 2 Tabellen

videos (9):
- vid (INT) (auto_increment)
- channel_id (INT)
- channel_sid(INT)
- video (varchar 150) (flv - pfad)
- video_hq (varchar 150)
- titel (varchar 100)
- subTitle (varchar 150)
- shortInfo (varchar 200)
- beschreibung (TEXT)

... und ...
ratings (5):
- rid (INT) (auto_increment)
- vid(INT)
- uid (INT)
- rating(INT)
- datum (TIMESTAMP)


Aufbau scheint ja klar zu sein. In Videos sind die Videos gespeichert und in Ratings die Ratings zum einzelnen Video. (in dem Feld rating steht immer eine Ganzzahl)

Wie kann ich jetzt (am besten nur per SQL) mir die 10 Videos ausspucken lassen die am besten Bewertet wurden.

Die Ausgabe sollte so aussehen :

[Position = 1] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 2] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 3] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 4] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 5] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 6] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 7] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 8] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 9] video[vid] - video[titel] - video[subTitle] - ratings[rating]
[Position = 10] video[vid] - video[titel] - video[subTitle] - ratings[rating]

das [Position = X] ist natürlich kein DB Feld sondern nur eine fortlaufende Nummer die ich in php erzeuge.

Ich bin um jede Hilfe dankbar ... ich stehe nämlich gerade ziemlich auf dem Schlauch !


mfg DiDi
 
Hallo,
ich hoffe folgende sind die richtigen stichwörter (bin gerade etwas python geschädigt ;-))
Code:
Join, Select, count/limit, sort by
sollten dir schon mal gewaltig helfen...

lg
michi
 
probiers mal mit

Code:
SELECT videos.vid, videos.title, videos.subTitle, ratings.rating
FROM videos JOIN ratings
ON videos.vid = ratings.vid
WHERE 1
ORDER BY ratings.rating DESC 
LIMIT 10

!ungetestet!
Edit: Ach mist, da war jemand schneller :)
 
Zuletzt bearbeitet:
ich hätte nur eine minute länger überlegen müssen...

ihr habt zwar alle (fast) recht aber so mache ich es nun (da kriege ich auch direkt das rating pro video ausgegeben)

Code:
select a.vid,a.title, avg(b.rating) 
from videos a, ratings b 
WHERE b.vid=a.vid group by 1
 
Zurück