Avatar billede neo_bill Nybegynder
09. juli 2005 - 16:33 Der er 11 kommentarer og
1 løsning

Highscore nummer

Hej Folkens!

Jeg har brug for lidt hjælp til PHP/MySQL.

Jeg har en highscoredatabase ( id, navn, points ). Når jeg skal vise alle brugernes highscore er det intet problem at lave highscores, MEN når jeg skal vise en enkelt brugers profil er det et problem. Er der nogen måde hvorpå jeg let kan ornde dette?

Indtil videre sker dette med en
$sql = "SELECT * FROM `highscores` ORDER BY `points` DESC";
$res = myql_query($sql); 
for($n = 0; ($row = mysql_fetch_array($res)) == TRUE; $n++){
if($row['id'] == $id){
$nummer = $n;
}
}

Er der nogen der har en smartere metode? Eventuelt en funktion?
Avatar billede busschou Praktikant
09. juli 2005 - 16:38 #1
Kan du ikke bare vælge den direkte i sqlén ?
$sql = "SELECT * FROM `highscores` WHERE `id` = $id ORDER BY `points` DESC";
Avatar billede busschou Praktikant
09. juli 2005 - 16:39 #2
Hvis bare du har id eller navn så kan du jo fange den enkelte i een sql sætning, og slippe for at løbe hele tabellen igennem :O)
Avatar billede neo_bill Nybegynder
09. juli 2005 - 18:09 #3
Ja, men jeg skal have det nummer brugeren ligger på higscoren
Avatar billede busschou Praktikant
09. juli 2005 - 18:14 #4
ahh ok så brugerens point er underordnet, spørgsmålet er hvor mange som har flere point end brugeren
Jeg tror ikke der er andet at gøre end noget ala det du gør
Altså selecte det hele i sorteret rækkefølge og loope det igennem til du finder brugeren, og så stoppe fordi du der kender positionen
Så er det vel en smags sag om man benytter en while eller for løkke
Men jeg vil ikke mene du kan finde positionen i ren sql
Avatar billede sukos Juniormester
09. juli 2005 - 18:27 #5
Hvor får du $id fra i din forløkke?

Eller, mere præcist hvordan du ønsker at finde brugeren, ud fra hvilke kreterier, ville jeg gerne vide.
Avatar billede neo_bill Nybegynder
09. juli 2005 - 19:31 #6
Okay scriptet får et id som den skal vise en profil ud fra. Her er det vigtigt at man kan se highscore og points osv. I eksemplet er det underordnet - Det vigtige er at man kan se det nummer brugeren ligger på highscoren. Her er det så jeg godt kunne tænke mig at vide om man kunne lave nogle tricks så man slipper for at køre hele scoren igennem.

Jeg har overvejet denne løsning:
$sql = "SELECT * FROM `highscores` WHERE >= '". [Variabel med points] ."' ORDER BY `points` DESC";
$res = mysql_query($sql);
$nummer = mysql_num_rows($res);

Nogen der tror det virker?
Avatar billede neo_bill Nybegynder
09. juli 2005 - 19:34 #7
SELECT * FROM `highscores` WHERE `points` >= '". [Variabel med points] ."' ORDER BY `points` DESC

RETTELSE!
Avatar billede busschou Praktikant
09. juli 2005 - 19:39 #8
ja selvfølgelig hvis du ved hvor mange point vedkommende har på forhånd
Jeg troede blot du kun havde navn og id at gå ud fra :o)
Måske der skal to forespørgsler til så
En som finder personens point antal
Select points From highscores Where Id = $id
Dernæst en som blot tæller antallet som har flere points
Select Count(*) From highscores Where points >= $points
Avatar billede neo_bill Nybegynder
09. juli 2005 - 19:44 #9
Den er tæt på at være der, men der er lige et problem mere. Hvis to brugere har ens points vil

> Select Count(*) From highscores Where points >= $points

Ikke virke optimalt. Den med det højeste id skal her ligge højest. To brugere med ens points vil have samme rang.
Avatar billede busschou Praktikant
09. juli 2005 - 19:49 #10
ja ok så tror jeg altså den nemmeste løsning for dig er at løbe dem igennem i en løkke
Hvor mange poster drejer det sig om? For det skal jo være pæænt mange før det kan mærkes i performance
Du kunne også selecte på hvor mange som har $points og hvis flere end een har samme points så finde id´et som er højst og dernæst søge dennes position
Men så er spørgsmålet om det er hurtigst at lave en løkke som løber måske 50poster igennem eller lave 2-4 seperate sql statements som løber alt igennem for at opnå det samme jo :o)
Avatar billede neo_bill Nybegynder
09. juli 2005 - 20:04 #11
Well problemet er at der er lige godt 250 users, og til hver af dem hører ikke bare en men 25 highscores.

Men efterjeg har hørt mg omkring tror jeg ikke der er nogen anden udvej, men busschou tak for hjælpen - svar gerne ;)
Avatar billede busschou Praktikant
09. juli 2005 - 20:07 #12
Alternativt skulle du bruge lidt krudt på en gang for alle at lave en "placerings" tabel i din database
Den ville være rimelig nem at opdatere hver gang der kom en ny score fra en bruger i hver af de 25 kategorier
Den kunne jo indeholde "kategori", "id" og "placering"
Og den ville så være nem at hive ud af når noget skulle vises på de forskellige sider :o)
Det kan du jo tænke over
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