[php/mysql] Określenie pozycji w statystykach

0

Witam,

mam tabele w mySQL w postaci:
u_points:
+user_id
+points

dodaję tam id uzytkownika i jego punkty np (1,3 ; 1,5 ; 2,4) Jak teraz moge szybko określić pozycję użytkownika na stronie statystyk...?

Jesli wyswietlam, uzywam czegoś w stylu:

SELECT SUM(points) AS points,user_id FROM u_points GROUP BY user_id ORDER BY points DESC LIMIT 10;

Wynik:

Array ( [0] => Array ( [points] => 12 [user_id] => 17 ) [1] => Array ( [points] => 5 [user_id] => 21 ) [2] => Array ( [points] => 3 [user_id] => 52 ) [3] => Array ( [points] => 3 [user_id] => 79 ) [4] => Array ( [points] => 2 [user_id] => 76 ) )

A jak właśnie określi pozycję użytkownika np o ID: 99 ?

0

Można to zrobić dość łopatologicznie, mam nadzieję, że zwolennicy dobrze zoptymalizowanych skryptów mnie nie zlinczują...

Pobierasz najpierw wyniki, a później:

function spr_miejsce($id,$wyniki)
{
     for($i=0; $i < count($wyniki); $i++)
     {
          if($wyniki[$i]['user_id']==$id)
          {
               return $i;
          }
     }
}

// zmiennej $miejsce zostanie przypisana wartość zwrócona przez funkcję
$miejsce=spr_miejsce(99,$tabela_z_wynikami);
// teraz można już uzyskać na przykład jego ilość punktów:
$punkty=$tabela_z_wynikami[$miejsce]['points'];
// jeśli chcemy wyświetlić jego miejsce to wypadałoby zwiększyć tą wartość o 1, gdyż klucz do tablicy wynosi 0, a zerowe miejsce by głupio wyglądało ;p
0

możesz dodać kolumnę cacheującą ilosć punktów danego użytkownika (+ indeks na nią) i przy dodawaniu punktów od razu aktualizować i nią. Potem tylko dajesz SELECT COUNT(id) FROM tabela WHERE punkty > punkty_naszego_usera.

Ale w poważnych systemach nie stosuje się cache i odpowiedniejszym rozwiązaniem było by podobne do tego podanego przez Lorta, tylko ujęte w bardziej wymyślne zapytanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1