webForumDet fria alternativet

hjälp med fråga

Databaser & SQL

10 svar · 267 visningar · startad av trexter

Medlem sedan mars 20021 889 inlägg
Frågan#1

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? :)

Medlem sedan juni 20034 013 inlägg
#2

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.

Medlem sedan juni 20034 013 inlägg
#3

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']

Medlem sedan mars 20021 889 inlägg
#4

Nja, onödigt att loopa igenom några tusen rader om det går att fixa direkt med sql.

Medlem sedan juni 20034 013 inlägg
#5

Det beror på hur många användare du behöver söka efter. En array är ju snabbare än en databas.

Medlem sedan mars 20021 889 inlägg
#6

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?

:)

Medlem sedan juni 20034 013 inlägg
#7

> 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.

Medlem sedan mars 20021 889 inlägg
#8

Oki, men får se om någon har något alternativ.

Medlem sedan mars 20032 667 inlägg
#9

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
Medlem sedan mars 20032 667 inlägg
#10

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
Medlem sedan mars 20021 889 inlägg
#11

tackar

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)