Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rankingi problem z "rank"
Forum PHP.pl > Forum > Bazy danych > MySQL
grOm
Witam,
mam tabele w ktorej są dodawane punkty dla usera:
  1. Kolumna Typ Komentarz
  2. id int(255) Auto Increment
  3. doradcy_id int(255)
  4. ilosc int(255)
  5. opis text
  6. data int(255)

Przykladowe dane z niej :
  1. edytuj id doradcy_id ilosc opis data
  2. edytuj 1 1 25 Za zarejestrowanie siÄ? w programie do dnia 30 wrze??nia 2011 r. 1314032934
  3. edytuj 2 2 25 Za zarejestrowanie siÄ? w programie do dnia 30 wrze??nia 2011 r. 1314033502
  4. edytuj 3 2 5 rozwiÄ?za?? Testowy quiz z czasem 13 sekund 1314127568
  5. edytuj 4 2 10 rozwiÄ?za?? #2 quiz z sierpnia z czasem 5 sekund 1314128427
  6. edytuj 5 2 10 rozwiÄ?za?? Testowy z czasem 4 sekundy 1314128712
  7. edytuj 6 2 10 rozwiÄ?za?? Testowy z czasem 23 sekundy 1314129117
  8. edytuj 7 2 10 rozwiÄ?za?? Testowy z czasem 37 sekund 1314129195
  9. edytuj 8 2 48 rozwiÄ?za?? Testowy z czasem 2 minuty 1314129624
  10. edytuj 9 2 50 rozwiÄ?za?? Nazwa quizu z czasem 6 sekund 1314129824


Zrobiłem z tego ranking zapytaniem :
  1. SELECT punkty.doradcy_id AS id, SUM(punkty.ilosc) AS punkty,doradcy.imie
  2. FROM punkty
  3. LEFT JOIN doradcy ON punkty.doradcy_id = doradcy.id
  4. WHERE (DATA BETWEEN 1312149600 AND 1314827999)
  5. GROUP BY doradcy_id
  6. ORDER BY punkty DESC


Dostaje cos w stylu :
  1. id punkty imie
  2. 2 168 KRZYSZTOF
  3. 1 25 ZBIGNIEW


Chciałbym jakos ponumerować wyniki
Próbowałem dodawać do zapytania :
  1. SET @i=0;
  2. SELECT @i:=@i+1 AS rank

I to numeruje ale przez to ze jest ORDER BY punkty user z najwyzszym rankingiem ma ostatni RANK i nie wiem jak to obejsc, pomoże ktos ?
Mogę oczywiście zrobic to z poziomu php ale baza jest spora i musial bym po kolei leciec po rankingu i szukac np id usera ktory mnie interesuje
mortus
Nie wiem, jak będzie z wydajnością, ale możesz spróbować tak:
  1. SELECT @nr:=@nr+1 AS `rank`, `p`.*
  2. FROM
  3. (SELECT @nr:=0) AS `init`,
  4. (SELECT `punkty`.`doradcy_id` AS `id`, SUM(`punkty`.`ilosc`) AS `punkty`, `doradcy`.`imie`
  5. FROM `punkty`
  6. LEFT JOIN `doradcy` ON `punkty`.`doradcy_id` = `doradcy`.`id`
  7. WHERE (`data` BETWEEN 1312149600 AND 1314827999)
  8. GROUP BY `doradcy_id` ORDER BY `punkty` DESC
  9. ) AS `p`
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.