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:
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. |
|
|
|
![]() |
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. |
|
|
|
kitol Kolejność rekordów w GROUP BY 23.10.2007, 21:51:10
nevt Wg moich doświadczeń z MySQL5 pole klucza podstawo... 24.10.2007, 12:21:32
mwojcik Grupowanie w MySQLu nie dziala poprawnie, bo wedlu... 24.10.2007, 18:15:28 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 01:55 |