Avatar billede ducks Nybegynder
08. april 2006 - 04:54 Der er 9 kommentarer og
1 løsning

Udskriv de 10 med højst score udregnet fra anden tabel

Jeg skal have udregnet score på nogle records i tabel_1 ud fra tabel_2.

Tabel_1 ser sådan fx ud:

id | navn
1 | eks1
2 | eks2
3 | eks3
4 | eks4
5 | eks5

Tabel_2 ser sådan fx ud:

rating | navnID
2 | 3
4 | 3
5 | 4
1 | 5
5 | 1
7 | 1
3 | 1
1 | 2
5 | 2
7 | 3

Ud fra det vil have
1. Sorteret navn i tabel_1 så dem med højest rating kommer først.
2. Nøjes med at udskrive 3 fra tabel_1

Jeg går ud fra at, for at jeg skal sortere efter rating, bliver det noget i retningen af SELECT AVG(rating) FROM tabel_2 GROUP BY navnID ORDER BY AVG(rating).

Og derefter kan jeg hive dem ud med 3 bedste ratings ved at joine det sammen på en eller anden måde og så LIMIT() selvf.

Men jeg kan ikke overskue, hvordan det skal skrues rigtigt sammen, så jeg håber nogen af jer har løsningen :(

- Udskriften bliver i PHP, hvis det skulle have nogen indflydelse. -
Avatar billede arne_v Ekspert
08. april 2006 - 05:08 #1
prøv

SELECT navn,AVG(rating)
FROM tabel_1,tabel_2
WHERE tabel_1.id=tabel_2,navnid
GROUP BY navn
ORDER BY AVG(rating)
LIMIT 3
Avatar billede arne_v Ekspert
08. april 2006 - 05:08 #2
SELECT navn,AVG(rating)
FROM tabel_1,tabel_2
WHERE tabel_1.id=tabel_2.navnid
GROUP BY navn
ORDER BY AVG(rating)
LIMIT 3
Avatar billede arne_v Ekspert
08. april 2006 - 05:08 #3
SELECT navn,AVG(rating)
FROM tabel_1,tabel_2
WHERE tabel_1.id=tabel_2,navnid
GROUP BY navn
ORDER BY AVG(rating) DESC
LIMIT 3
Avatar billede arne_v Ekspert
08. april 2006 - 05:09 #4
nej som jeg fumler

SELECT navn,AVG(rating)
FROM tabel_1,tabel_2
WHERE tabel_1.id=tabel_2.navnid
GROUP BY navn
ORDER BY AVG(rating) DESC
LIMIT 3
Avatar billede arne_v Ekspert
08. april 2006 - 05:09 #5
så skulle både punktum og DESC være der
Avatar billede ducks Nybegynder
08. april 2006 - 05:29 #6
Skal der ikke stå GROUP BY navnID istedet?
Avatar billede ducks Nybegynder
08. april 2006 - 05:33 #7
Der er stadig et eller andet galt, men det skyldes muligvis, at jeg ikke kan finde ud af at få det ud med PHP:

$sql = mysql_query("SELECT navn,AVG(rating) FROM tabel_1,tabel_2 WHERE tabel_1.id=tabel_2.navnid GROUP BY navnID ORDER BY AVG(rating) DESC LIMIT 3");

while($row=mysql_fetch_array($sql))
    echo $row["navn"];
Avatar billede ducks Nybegynder
08. april 2006 - 08:06 #8
Avatar billede ducks Nybegynder
08. april 2006 - 08:20 #9
Så har jeg vidst fået løst det, ligger du et svar arne_v? Uden dig havde jeg aldrig fået løst det.

Undervejs i det her lille projekt, fandt jeg iøvrigt siden: http://www.tizag.com/ - den har rigtig gode referencer.

Jeg vedlægger lige PHP koden, hvis det kan hjælpe andre også :)


$sql = mysql_query("
    SELECT
        AVG(table_2.rating) AS AVG_RATING,
        table_1.navn
    FROM
        table_2,
        table_1
    WHERE
        table_1.id=table_2.navnID
    GROUP BY
        table_2.navnID
    ORDER BY
        AVG_RATING DESC
    LIMIT
        3
");
while($row = mysql_fetch_array($sql))
    echo $row["AVG_RATING"] ." ". $row["navn"] ."<br />";
Avatar billede arne_v Ekspert
08. april 2006 - 15:19 #10
ah ja, når man henter kolonner ud på navn, så skal man give expressions et navn

svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester