SELECT username FROM din_tabell ORDER BY points DESC
Sen är det ju lätt med det skriptspråk du använder att numrera raderna.
10 svar · 265 visningar · startad av trexter
Säg att jag har en tabell med fälten: username & points
Och med datan:
nisse 50
olle 10
pekka 100
Sedan vill jag med en sql-fråga ta reda på vilken "rating" en viss person har genom att titta på dess points-värde. Utskrivet borde det alltså i detta fallet kunna bli:
nisse 2
Hur ser denna SQL-fråga ut? :)
SELECT username FROM din_tabell ORDER BY points DESC
Sen är det ju lätt med det skriptspråk du använder att numrera raderna.
Jag tror fortfarande det enklaste är att du använder dig av skriptspråket. I php är det busenkelt, bara att läsa in i en array:
<?php
$i = 0;
while ($row = mysql_fetch_array())
{
$rating[$row['username']] = ++$i;
}
?>
Sedan hittar du alltså personens rating i:
$rating['personens_namn']
Nja, onödigt att loopa igenom några tusen rader om det går att fixa direkt med sql.
Det beror på hur många användare du behöver söka efter. En array är ju snabbare än en databas.
tydal skrev:
Det beror på hur många användare du behöver söka efter. En array är ju snabbare än en databas.
Array snabbare än en databas? I vilket sammanhang?
Någon som vet om man kan lösa det med sql?
:)
> Array snabbare än en databas? I vilket sammanhang?
Alla. En array ligger i minnet och en databas på hårddisk. Det som tar tid är att föra över informationen tlil arrayen, men om du ska göra flera liknande sökningar så lönar det ju sig.
Oki, men får se om någon har något alternativ.
Du borde få fram vilken plats i listan en poäng ligger genom följande fråga, med reservation om där är flera med samma poäng, för då blir platsen delad.
select count(*) from tabellen
where points <= 50
Kom på en sak, det beror ju på hur du vill räkna din lista. Vill du räkna utifrån högsta rating får vi ändra en aning på frågan.
select count(*) from tabellen
where points >= 50
tackar