Avatar billede zaditor Nybegynder
21. januar 2012 - 20:55 Der er 6 kommentarer og
1 løsning

MySQL: select fra highscore (5 før og 5 efter ens egen placering)

Hej Eksperten,

Jeg sidder og skal lave en select fra en highscore, hvor jeg skal vise følgende:


Highscore:

1
2
3
4
5
MIN placering
6
7
8
9
10

Hvordan gør jeg det?

Det skal også lige siges, at jeg skal sortere efter følgende: hvilken status spillerne har (de kan have 0=bronze, 1=sølv, 2=guld).

DVS jeg skal finde en spillers placering blandt spillere med fx bronze-status, og så skal jeg tage denne spillers placering og vise de fem spillere, der er lige foran ham og de fem, der er lige bagefter ham.

Vh
Dan
Avatar billede arne_v Ekspert
21. januar 2012 - 23:16 #1
SELECT * FROM tabel WHERE score >= X ORDER BY score ASC LIMIT 6
UNION
SELECT * FROM tabel WHERE score <= X ORDER BY score DESC LIMIT 6

burde give nogle relevante data (yderligere betingelser kan bare saettes paa).
Avatar billede zaditor Nybegynder
22. januar 2012 - 10:26 #2
Hej arne_v

Tak for svar,

Det ser umiddelbart ud til, at det er det, jeg leder efter. Dog synes jeg, når jeg løber igennem det, den fanger, at det kommer ud lidt "forkert".

hvis X = 576

og jeg løber igennem på følgende måde:

while($row = mysql_fetch_array($result)) {
    echo $row['uuid'] . " - " . $row['name'] . " - " . $row['count'] . " - " . $row['image'] . " - " . $row['status'] . " - " . $row['time'] . '<br />';
}

Så smider den det ud sådan her: (hvor den i fed, er den jeg vil vise placeringerne ud fra)

[b]dgsunesen - Dan Sunesen - 576 - images/dan.jpg - 2 - 22-01-2012 10:14:51[b]
test2 - Test 2 - 653 - images/test2.jpg - 2 - 22-01-2012 09:28:13
test4 - Test 4 - 732 - images/test4.jpg - 2 - 22-01-2012 09:28:50
test9 - Test 9 - 738 - images/test9.jpg - 2 - 22-01-2012 09:30:31
test - Test - 786 - images/test1.jpg - 2 - 22-01-2012 09:24:33
test5 - Test 5 - 834 - images/test5.jpg - 2 - 22-01-2012 09:29:10
test6 - Test 6 - 482 - images/test6.jpg - 2 - 22-01-2012 09:29:36
test1 - Test 1 - 456 - images/test1.jpg - 2 - 22-01-2012 09:37:00
test7 - Test 7 - 305 - images/test7.jpg - 2 - 22-01-2012 09:29:58
test3 - Test 3 - 156 - images/test3.jpg - 2 - 22-01-2012 10:12:34
test11 - Test 11 - 123 - images/test11.jpg - 2 - 22-01-2012 09:56:15

De, der er højere end 576, burde de ikke lægge før?
Avatar billede zaditor Nybegynder
22. januar 2012 - 10:27 #3
Hov, fik ikke lige afsluttet b-tag'et (men det er den første :))
Avatar billede zaditor Nybegynder
22. januar 2012 - 14:27 #4
Ved ik, om det giver mening?
Avatar billede arne_v Ekspert
22. januar 2012 - 17:30 #5
(SELECT * FROM tabel WHERE score >= X ORDER BY score ASC LIMIT 6)
UNION
(SELECT * FROM tabel WHERE score <= X ORDER BY score DESC LIMIT 6)
ORDER BY score DESC

maaske
Avatar billede zaditor Nybegynder
22. januar 2012 - 19:50 #6
Great stuff, Arne!

Det gi'r jo egentlig fint mening, at man kan sortere hele molevitten bagefter hele query select'en!


Smid et svar, så får du point!


/Dan
Avatar billede arne_v Ekspert
22. januar 2012 - 20:17 #7
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

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