Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kolejność rekordów w GROUP BY
kitol
post
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 26
Dołączył: 19.01.2007

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


Mam tabelę a w niej kolumny: user_id, record_id (primary key,autoincrement), oraz inne pola z danymi.
Potrzebuję wyjąć dla każdego usera jeden najstarszy rekord (czyli ten który ma najmniejszy record_id dla danego usera). Zapytanie ma zwracać tyle wierszy ile jest userów w każdym wierszu dane (pozostałe kolumny) z najstarszego rekordu.
Zapytanie wygląda tak:

  1. SELECT * FROM tabela GROUP BY user_id


Zauważyłem, (MySQL 5.0) że za każdym razem dla każdego usera zwracany jest wynik z najmiejszym record_id pomimo, że w zapytaniu nie mam zdefiniowanego sortowania po record_id. Czy baza przyjmuje takie sortowanie domyślnie (bo record_id jest kluczem głównym)? Czy takie wyniki będą zwracane zawsze? Czy muszę wprowadzić do zapytania klauzulę ORDER BY i LIMIT 1? Zależy mi na szybkości dla dużej ilości rekordów.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
najtje
post
Post #2





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 4.10.2007

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


Moim zdaniem to co wypisywane jest w wierszu i co nie jest objęte klauzulą GROUP BY jest wpisywane na zasadzie tego który wiersz pierwszy zakwalifikuje się do spełnienia warunku group by podczas skanowania danych tabeli.

Spróbuj uaktualnić id na jakieś inne i sprawdzić czy wyniki się powtarzają (id chyba generowane jest poprzez autoincrement więc dobrze obrazuje kolejność w jakim były umieszczane dane w tabeli - chociaż uaktualnienie można zrealizować też poprzez dopisanie nowych danych i unieważnienie starego wpisu i dopiero po jakimś porządkowaniu bazy by to wyszło).
Trochę dziwne (z punktu widzenia optymalizacji) by było gdyby baza zwracała zawsze minimalną wartość - oznaczałoby to że jeśli klauzula group by nie odnosi się do wszystkich pól odpowiedzi, które produkuje zapytanie to dane wcześniej poddawane są jakiemuś sortowaniu podczas skanowania tabeli.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 01:55