Avatar billede w13 Novice
22. april 2015 - 18:42 Der er 4 kommentarer og
1 løsning

MySQL: Hente placering i liste ud

Hej Eksperter

Tilgiv mig, thi jeg er lidt rusten udi MySQL.

Jeg har denne, lidt lange, SQL-sætning:
---
SELECT
    sc.school,
    AVG(r.score) as avg_score
FROM
    school_classes sc
LEFT JOIN (
    SELECT
        id,
        school_class_id
    FROM
        users
) AS u
ON
    u.school_class_id = sc.id
LEFT JOIN (
    SELECT
        id,
        user_id,
        score
    FROM
        results
) AS r
ON
    r.user_id = u.id
GROUP BY
    sc.school
ORDER BY
    avg_score DESC
LIMIT
    10
---

Jeg ønsker dog - foruden at hente denne liste ud - også at hente liste-placeringen(!) for en helt bestemt school_class ud.

Altså også selvom placeringen måske ligger uden for de ti, som hentes med "LIMIT 10".

Hvordan gør jeg det bedst og nemmest?

På forhånd mange tak!

Med venlig hilsen
Tobias
22. april 2015 - 19:29 #1
Hvis du blot, ud over de ti højeste resultater, vil have resultatet fra en bestemt klasse, kan det vel gøres med UNION:

SELECT
    sc.school,
    AVG(r.score) as avg_score
........din oprindelige query...
LIMIT 10
UNION
SELECT
    sc.school,
    AVG(r.score) as avg_score
FROM .....
WHERE [de klasser du vil have]
Avatar billede w13 Novice
23. april 2015 - 10:01 #2
Hej Christian

Tak for dit svar!

Jeg ønsker dog ikke blot resultatet, men placeringen. :-/ Fx "Her er top 10, og du ligger i øvrigt nr. 23 på listen." Ved du, hvordan jeg får fat i den?

På forhånd tak!

Med venlig hilsen
Tobias
24. april 2015 - 06:21 #3
Jeg er meget hængt op for tiden, og nu står jeg og skal afsted igen.  Men en umiddelbar kommentar vil være, at du ikke skal forsøge at få sql til at levere et sådant resultat; det er en opgave for php applikationen.  Måske ved du i queryen skipper 'LIMIT 10' og tager hele mollevitten ind i php in en array, hvor du også for hver skole gemmer dens placering.  Når du så ved hvilken skole du vil vise (formentligt er skolen identificeret i sc.school) finder du dens placering i arrayen.  Er den ikke blandt de første 10, udskriver du 'og du ligger i øvrigt nr. xx' og derefter udskriver du de første 10.
Avatar billede w13 Novice
26. april 2015 - 16:09 #4
Hej Christian

Det gør jeg, tak! :) Vil du lægge et svar?
26. april 2015 - 22:39 #5
Svar fra mig.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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