Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z sortowaniem po grupowaniu
phpion
post 15.09.2008, 08:33:29
Post #1





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam,
mam pewien problem. Mam tabelę, w której przechowuję wyniki użytkowników w danej grze. Struktura tabeli to:
Kod
id, user_id, game_id, wynik, data

Każdy gracz do każdej gry może mieć kilka rekordów.
Chciałbym teraz pobrać listę 10 najlepszych graczy sortując ich najpierw po zdobytych punktach malejąco, a następnie (i tu problem) po dacie uzyskania punktów rosnąco.
W wyniku mam takie zapytanie:
  1. SELECT
  2. a.user_id, MAX(a.wynik) AS score, b.username, b.user_email, b.lost_info, FROM_UNIXTIME(a.`data`)
  3. FROM ranking a
  4. LEFT JOIN phpbb_users b ON b.user_id=a.user_id
  5. WHERE a.game_id=33 AND b.user_active=1 AND a.active=1
  6. GROUP BY
  7. a.user_id
  8. ORDER BY score DESC,
  9. a.`data` ASC LIMIT 10
  10. ;

Problem jednak w tym, że nie wiem w jaki sposób wyciągnąć datę uzyskania danego wyniku (po której ma nastąpić sortowanie). Aktualnie wybierana jest data uzyskania pierwszego wyniku w ogóle danego użytkownika dla danej gry.

Może podam przykładowe dane wyjściowe:
http://images32.fotosik.pl/361/a764f8be52aab7f9.png
Proszę zwrócić uwagę na użytkowników, którzy zdobyli po 450 pkt oraz daty, jakie widnieją przy wynikach (są niepoprawne).
Dane zawarte w bazie dla tych dwóch użytkowników dla danej gry (posortowane po punktach i dacie) to:
http://images38.fotosik.pl/10/fa82770aa2b9abad.png
Widać wyraźnie, że w zapytaniu, o które mi chodzi brana jest pod uwagę pierwsza wpisana data, a nie ta, kiedy zostały zdobyte punkty.

Proszę o pomoc,
pion
Go to the top of the page
+Quote Post
Kicok
post 15.09.2008, 12:33:22
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. SELECT *
  2. FROM( ##PODZAPYTANIE## ) t
  3. GROUP BY t.user_id


A w podzapytaniu wyciągasz dane z tabel sortując je po wyniku malejąco.


EDIT
Pisane z palca, nie mam teraz możliwości sprawdzenia czy to działa

Ten post edytował Kicok 15.09.2008, 12:51:33


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
phpion
post 15.09.2008, 13:01:07
Post #3





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Chciałem zrobić w podobny sposób wyciągając datę w podzapytaniu na podstawie id użytkownika oraz wybranej liczby punktów ale nie mogę użyć aliasu score w podzapytaniu. Również nie mogę użyć id wyniku, gdyż jest on (jak i data) pierwszy z brzegu.
Go to the top of the page
+Quote Post
Kicok
post 15.09.2008, 13:16:24
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Ze swojego zapytania ( które masz w 1 poście ) wywal GROUP BY, LIMIT i zamień MAX( `wynik` ) na `wynik`. To jest teraz twoje ##PODZAPYTANIE##, które wykonuje wszystko oprócz grupowania, więc wstawiasz je do zapytania zewnętrznego tak jak pokazałem i powinieneś otrzymać pczekiwane wyniki.

Zauważ, że nie chodzi mi o: SELECT ( ##PODZAPYTANIE ## ) FROM tabela
tylko o: SELECT * FROM ( ##PODZAPYTANIE ## ) t


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
phpion
post 15.09.2008, 13:47:10
Post #5





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Działa świetnie! Dzięki serdeczne za pomoc smile.gif
guitar.gif

Finalnie mam takie zapytanie:
  1. SELECT *
  2. FROM (SELECT a.user_id, wynik, b.username, b.user_email, b.lost_info, a.`data`
  3. FROM ranking a
  4. LEFT JOIN phpbb_users b ON b.user_id=a.user_id
  5. WHERE a.game_id=33 AND b.user_active=1 AND a.active=1
  6. ORDER BY wynik DESC,
  7. a.`data`) t
  8. GROUP BY t.user_id
  9. ORDER BY t.wynik DESC, t.`data` ASC LIMIT 10 ;


Ten post edytował phpion 15.09.2008, 13:48:05
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: 3.06.2024 - 11:28