22. april 2015 - 18:42Der 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".
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]
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?
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.
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.