Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Rankingi problem z "rank"
grOm
post
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 4
Dołączył: 6.10.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował grOm 25.08.2011, 00:18:09
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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`


Ten post edytował mortus 25.08.2011, 08:13:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 14:48