![]() |
![]() |
![]()
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: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
Wg moich doświadczeń z MySQL5 pole klucza podstawowego jest domyślnym porządkiem sortowania tabeli w przypadku SELECT'a bez klauzuli ORDER BY. Robiłem proste doświadczenie, po dodaniu kilku rekordów z ID=AUTOINCREMENT ręcznie modyfikowałem wartości kluczy ID i ewidentnie zmieniała się wtedy kolejność rekordów zwracanych przez SELECT - dokładnie tak jakbym wpisywał klauzulę ORDER BY ID.
Więc możesz założyć - przynajmniej w przypadku MySQL - że twoja konstrukcja zapytania będzie poprawna i optymalna - ale nie ma gwarancji że będzie działać po ew. zmianie serwera bazy danych... Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.10.2025 - 14:22 |