trexterMedlem sedan mars 20021 889 inlägg 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? :)
tydalMedlem sedan juni 20034 013 inlägg 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.
tydalMedlem sedan juni 20034 013 inlägg 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']
trexterMedlem sedan mars 20021 889 inlägg Nja, onödigt att loopa igenom några tusen rader om det går att fixa direkt med sql.
tydalMedlem sedan juni 20034 013 inlägg Det beror på hur många användare du behöver söka efter. En array är ju snabbare än en databas.
trexterMedlem sedan mars 20021 889 inlägg
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?
:)
tydalMedlem sedan juni 20034 013 inlägg > 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.
trexterMedlem sedan mars 20021 889 inlägg Oki, men får se om någon har något alternativ.
K@llenMedlem sedan mars 20032 667 inlägg 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
K@llenMedlem sedan mars 20032 667 inlägg 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