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
nevt
post
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.
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: 18.10.2025 - 14:22