Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Sortowanie wg. 2 kryteriów
qweluke
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 25.03.2010
Skąd: Radom

Ostrzeżenie: (10%)
X----


Panowie,

jak moge posortować wyniki pobrane przez zapytanie mysql?
  1. SELECT * FROM `xxx`, `yyy` WHERE xxx.id_uzytkownika=yyy.id ORDER BY xxx.id_uzytkownika DESC LIMIT 5


obecnie mam cos takiego, teraz to co otrzymałe chce posortować wg

yyy.zzz czyli powinienem jakoś dodać do zapytania SQL
  1. ORDER BY yyy.zzz ASC

ale już raz to występuje.

Wiem, ze jesteście w stanie mi pomóc (IMG:style_emoticons/default/smile.gif)

Ten post edytował qweluke 14.04.2010, 22:00:52
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
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%)
-----


Słowo wyjaśnienia. GROUP BY grupuje rekordy według wartości w danej kolumnie i na określonej grupie rekordów wykonuje zapytanie. My chcemy uzyskać najnowsze wpisy do grafiku dla każdego użytkownika z osobna. Jak się za to zabrać? Przede wszystkim grupujemy rekordy według identyfikatora użytkownika, a to w praktyce oznacza, że zapytanie zostanie wykonane dla każdej grupy rekordów i w poszczególnej grupie rekordów wszystkie rekordy "należą" do danego użytkownika. Niestety pobrany zostanie tylko jeden rekord z każdej grupy, ten pierwszy w kolejności w domyślnym sortowaniu. Jeżeli zatem chcemy wybrać te najnowsze rekordy z grafiku, to musimy najpierw posortować rekordy w odpowiedniej kolejności, czyli malejąco po id_grafiku. Teraz zapytanie:
  1. SELECT * FROM (SELECT * FROM xxx ORDER BY id_grafiku DESC) AS posortowane GROUP BY posortowane.id_uzytkownika;
Teraz dołączmy do tego wszystkie informacje o użytkowniku:
  1. SELECT * FROM (SELECT * FROM xxx ORDER BY id_grafiku DESC) AS posortowane, uzytkownicy WHERE uzytkownicy.id=posortowane.id_uzytkownika GROUP BY posortowane.id_uzytkownika;
Zapytanie takie zwróci wszystkie kolumny z tabeli xxx i wszystkie kolumny z tabeli uzytkownicy, zatem na pewno w wyniku pojawią się dwie kolumny o takiej samej zawartości poszczególnych wierszy (będą to kolumny z identyfikatorami użytkowników z obu tabel). Aby tego uniknąć musielibyśmy określić jakie dokładnie kolumny chcemy pobrać. Pozostaje jeszcze kwestia sortowania. Tak uzyskane wyniki są posortowane według id użytkownika począwszy od najmniejszego do największego. Tę kolejność możemy odwrócić dokładając do GROUP BY słowo DESC:
SELECT ... GROUP BY posortowane.id_uzytkownika DESC
Możemy również wymusić, aby wyniki były posortowane według id_grafiku. Dopisujemy na końcu
ORDER BY posortowane.id_grafiku

Ten post edytował mortus 22.04.2010, 21:08:47
Go to the top of the page
+Quote Post

Posty w temacie
- qweluke   [MySQL][PHP] Sortowanie wg. 2 kryteriów   14.04.2010, 22:00:08
- - pedro84   Proszę: KodORDER BY xxx.aaa DESC, yyy.bbb ASC W G...   14.04.2010, 22:07:11
- - qweluke   [SQL] pobierz, plaintext SELECT * FROM `xxx`, `yyy...   14.04.2010, 22:27:39
- - pedro84   Dziwisz się? [SQL] pobierz, plaintext SELEC...   14.04.2010, 22:30:23
- - qweluke   tak tez probowalem i tez nic z tego. poza tym, li...   14.04.2010, 22:38:21
- - mortus   [SQL] pobierz, plaintext SELECT * FROM (SELECT...   14.04.2010, 23:29:53
- - qweluke   przy takim zapytaniu wywala błąd [PHP] pobierz, p...   14.04.2010, 23:51:29
- - mortus   Zrób dump-a bazy danych, albo zaprezentuj struktur...   15.04.2010, 06:03:50
- - qweluke   [SQL] pobierz, plaintext CREATE TABLE `xxx` ( ...   15.04.2010, 08:48:51
- - mortus   Cytatteraz uzytkownik o ID 1 ma dwa wpisy, id_graf...   15.04.2010, 09:37:21
- - qweluke   z tabeli XXX chce wybrać najnowsze rekordy dla każ...   15.04.2010, 09:49:26
- - mortus   A takie zapytanie nie działa?[SQL] pobierz, plaint...   15.04.2010, 10:04:10
- - qweluke   nooo, w koncu zadziałało ale w takiej postaci [SQ...   15.04.2010, 10:09:29
- - mortus   AS last_five nadaje alias tymczasowej tabeli zwróc...   15.04.2010, 10:33:56
- - qweluke   działa świetnie, tylko że pojawił się jeszcze jede...   18.04.2010, 08:49:25
- - pedro84   Poczytaj o GROUP BY, dużo informacji masz...na tym...   18.04.2010, 09:54:33
- - qweluke   Panowie, nie potrafie sobie z tym poradzić :/ za...   22.04.2010, 09:49:14
- - mortus   Słowo wyjaśnienia. GROUP BY grupuje rekordy według...   22.04.2010, 20:58:31


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: 8.10.2025 - 15:57