Avatar billede shjorth Nybegynder
08. september 2008 - 17:05 Der er 8 kommentarer og
1 løsning

Placering i mysql udtræk

Hejsa.

Jeg har en "highscore" liste som jeg finder ved et mysql udtræk, og så "order by level, penge, køretøj"

Så er der blot en $i++ der viser placeringen på highscore listen.

Jeg kunne godt tænke mig at finde ud af hvad een bestemt bruger er på listen, så han kan se det på sin profil, men jeg kan ikke lige gennemskue hvordan jeg skulle gøre det.

Måske en mysql funktion der kan beregne hvad nummer han er i rækkefølgen?

Takker mange gange
Avatar billede michaelthomsendk Nybegynder
08. september 2008 - 18:00 #1
Du må vise din tabelstruktur og hele dit udtræk :-)
Avatar billede shjorth Nybegynder
08. september 2008 - 18:04 #2
$q = mysql_query("SELECT * FROM users ORDER BY level DESC, ac_rank DESC, acc DESC, wins DESC LIMIT 10")or die(mysql_error());
$i = 1;
while($row = mysql_fetch_array($q)) {
print("$row['navn'] er placeret som nr $i");
$i++;
}

Sådan ca der.. Men det er jo kun de 10 bedste der bliver placeret.. Det jeg ønsker at finde placeringen for een enkelt bruger :)
Avatar billede michaelthomsendk Nybegynder
08. september 2008 - 18:30 #3
Hvis du vil have numeret fra SQL må du have to "views"
v1: Som din forespørgsel, dog uden limit.
v2: Vælg alle fra v1 der er >= brugerens
Til sidst tæller du antallet i v2.

A la:
SELECT COUNT(*) AS Placering
FROM (
  SELECT ...
  FROM (
    SELECT ...
    ...
  ) AS v1
WHERE ...
) AS v2
Avatar billede shjorth Nybegynder
08. september 2008 - 18:40 #4
Yif.. Kunne du prøve at uddybe det lidt?
Avatar billede shjorth Nybegynder
08. september 2008 - 19:33 #5
Jeg har i mangel af bedre gjort sådan her:

function user_pos($userid) {
global $user_pos;
$q = mysql_query("SELECT * FROM users ORDER BY level DESC, ac_rank DESC, acc DESC, wins DESC")or die(mysql_error());
$i = 0;
while($row = mysql_fetch_array($q)) {
if($row['userid'] == $userid) {
    $user_pos = $i;
}
$i++;
}
}

Dog ikke skide optimalt :S
Avatar billede michaelthomsendk Nybegynder
08. september 2008 - 19:52 #6
Ja det er lettere i et rigtigt sprog som PHP.

Tip:
Der er ingen grund til at se resten af listen igennem når du har fundet brugeren.
$i = 0;
$user_pos = -1;
while(($row = mysql_fetch_array($q)) && ($user_pos == -1)) {
  if($row['userid'] == $userid) {
    $user_pos = $i;
  }
  $i++;
}
Og så bliver $user_pos iøvrigt en for lille :-)
Avatar billede shjorth Nybegynder
08. september 2008 - 19:58 #7
Ja den skal selvf lige rettes til 1 :D

"&& ($user_pos == -1)" Hvad er formålet med det?
Avatar billede shjorth Nybegynder
08. september 2008 - 20:01 #8
Men hey.. det virker fantastico, jeg forsøgte lidt med en bruger som er på en 10.000 plads, og det er ikke sløvere af den grund.. Det var mere det jeg frygtede :D

Takker mange gange.. ligger du et svar?
Avatar billede michaelthomsendk Nybegynder
08. september 2008 - 20:56 #9
Formålet med "&& ($user_pos == -1)" er at stoppe når du har fundet brugeren og ikke se resten igennnem.
Håber alt er vel nu :-)
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