Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Statystyka - które miejsce zajmuje użytkownik
japolak
post 26.09.2012, 08:54:13
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


witam
no i zrobiłem sobie tabele ze statystyką
tak jak poniżej prezentuje foto:



mam taki problem

jak z tej tabeli wyciągnąć:

informację na którym miejscu jest uzytkownik wg całego rankingu , i wg danego miesiaca

wiem jak wyświetlić ogolną statystykę
  1. SELECT SUM( points ) , id_user
  2. FROM `statistics`
  3. GROUP BY id_user
  4. ORDER BY SUM( points ) DESC


ale nie wiem jak wyciągnąć dane miejsce na którym jest użytkownik,
wg. tabeli powyżej powinno wyjść przykładowo dla user 4 - 3 miejsce

kto pomoże??

może zapytam inaczej - chodzi tu o numer wiersza w którym na którym bedzię urzytkownik 4
jak można sprawdzić kótry numer wiersza z wyniku zapytania spełnia warunek gdzie user = 4

Ten post edytował japolak 26.09.2012, 09:59:28


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post
ixox
post 26.09.2012, 11:32:21
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 13
Dołączył: 8.09.2012

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


  1. SET @rank=0;
  2.  
  3. SELECT @rank:=@rank+1 AS rank, SUM( points ), id_user
  4. FROM `statistics`
  5. GROUP BY id_user
  6. ORDER BY SUM( points ) DESC

Spróbuj tak. Tak na szybko. smile.gif
Go to the top of the page
+Quote Post
sazian
post 26.09.2012, 20:57:14
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


jest fajniejszy sposób na numrowsa
  1. SELECT *,@numrows:=@numrows+1 FROM tabela,(SELECT @numrows:=1) num
  2.  
Go to the top of the page
+Quote Post
japolak
post 26.09.2012, 22:50:25
Post #4





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


Cytat(ixox @ 26.09.2012, 12:32:21 ) *
  1. SET @rank=0;
  2.  
  3. SELECT @rank:=@rank+1 AS rank, SUM( points ), id_user
  4. FROM `statistics`
  5. GROUP BY id_user
  6. ORDER BY SUM( points ) DESC

Spróbuj tak. Tak na szybko. smile.gif



dzięki smile.gif pomogło

działająca wersja dla wyszukania miejsca konkretnego użytkownika:
  1. SET @rank=0;
  2.  
  3. SELECT *
  4. FROM (
  5.  
  6. SELECT @rank := @rank +1 AS rank, SUM( points ) , id_user
  7. FROM `statistics`
  8. GROUP BY id_user
  9. ORDER BY SUM( points ) DESC
  10. ) AS pozycja
  11. WHERE pozycja.id_user =4


oraz działająca wersja dla wyszukania miejsca konkretnego użytkownika wg. punktacji z danego miesiąca:
  1. SET @rank=0;
  2.  
  3. SELECT *
  4. FROM (
  5.  
  6. SELECT @rank := @rank +1 AS rank, SUM( points ) , id_user
  7. FROM (SELECT * FROM `statistics` WHERE DATE_FORMAT(DATE,'%m %Y')= DATE_FORMAT(now(),'%m %Y')) AS tymczas
  8. GROUP BY id_user
  9. ORDER BY SUM( points ) DESC
  10. ) AS pozycja
  11. WHERE pozycja.id_user =4



zmasz może szybszą wersje:) questionmark.gif

Cytat(sazian @ 26.09.2012, 21:57:14 ) *
jest fajniejszy sposób na numrowsa
  1. SELECT *,@numrows:=@numrows+1 FROM tabela,(SELECT @numrows:=1) num
  2.  



to też działa jak należy chodź wychodzi na to ze troche wolniejsze jest

rozwiązanie mojego zadanie wg. twojej podpowiedzi:

miejsce w całym rankingu
  1.  
  2. SELECT *
  3. FROM (
  4.  
  5. SELECT *,sum(points),@numrows:=@numrows+1 AS miejsce FROM statistics,(SELECT @numrows:=0) num
  6. GROUP BY id_user
  7. ORDER BY SUM( points ) DESC
  8. ) AS pozycja
  9. WHERE pozycja.id_user =3


miejsce w rankingu z ostatniego miesiaca
  1. SELECT *
  2. FROM (
  3.  
  4. SELECT *,sum(points),@numrows:=@numrows+1 AS miejsce FROM (SELECT * FROM `statistics` WHERE DATE_FORMAT(DATE,'%m %Y')= DATE_FORMAT(now(),'%m %Y')) AS tymczas,(SELECT @numrows:=0) num
  5. GROUP BY id_user
  6. ORDER BY SUM( points ) DESC
  7. ) AS pozycja
  8. WHERE pozycja.id_user =3



dzieki!!


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post
mmmmmmm
post 27.09.2012, 07:26:25
Post #5





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Wszystko fajnie, tylko że to nie są funkcje rankingujące... smile.gif Tylko nadające rownum, a to zupełnie co innego - nie uwzględnia pozycji ex-equo.
Np. dla podanych poniżej wartości zadziała źle:
sklep sprzedaż
1 100
2 200
3 100
4 200

Zwróci:
1 100 1
3 100 2
2 200 3
4 200 4

A powinien:
1 100 1
3 100 1
2 200 3
4 200 3
Go to the top of the page
+Quote Post
japolak
post 27.09.2012, 08:00:19
Post #6





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 11.03.2007
Skąd: Łódzkie

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


Cytat(mmmmmmm @ 27.09.2012, 08:26:25 ) *
Wszystko fajnie, tylko że to nie są funkcje rankingujące... smile.gif Tylko nadające rownum, a to zupełnie co innego - nie uwzględnia pozycji ex-equo.
Np. dla podanych poniżej wartości zadziała źle:
sklep sprzedaż
1 100
2 200
3 100
4 200

Zwróci:
1 100 1
3 100 2
2 200 3
4 200 4

A powinien:
1 100 1
3 100 1
2 200 3
4 200 3



Chol...e... ra racja..

Jak więc napisać takie cośquestionmark.gif


--------------------
moje projekty:

www.hackwars.pl
- hacking , webdesign itp
www.kosmosnews.pl - Wszechświat bez granic
Go to the top of the page
+Quote Post
sazian
post 27.09.2012, 21:36:12
Post #7





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


  1. SELECT tab.*,IF(@point<>point,@numrows:=@numrows+1,@numrows) num,IF(@point<>point,@point:=point,@point) p FROM
  2.  
  3. (
  4. SELECT 1 AS id,100 AS point
  5. UNION
  6. SELECT 2,100
  7. UNION
  8. SELECT 3,200
  9. UNION
  10. SELECT 4,200
  11. UNION
  12. SELECT 5,600
  13. ) tab,
  14. (SELECT @point:=-1,@numrows:=0) tab2
  15. ORDER BY point

jest jedna wada
podaje numeracje od końca
czyli aktualna pozycja to count(*)-num
oczywiście count musisz wyciągnąć w osobnym zapytaniu

Ten post edytował sazian 27.09.2012, 21:37:06
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.05.2024 - 01:28