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
mwojcik
post
Post #2





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


Grupowanie w MySQLu nie dziala poprawnie, bo wedlug algebry relacji na ktorej opiera sie SQL, bez sensu jest grupowanie wedlug jakiegos parametru i nie uzywanie agregowania wedlug innego. Twoje zapytanie powinno wygladac mniej wiecej tak :
  1. SELECT * FROM tabela WHERE record_id IN (SELECT MIN(record_id) FROM tabela GROUP BY user_id) ORDER BY record_id DESC

, ktore to zapytanie najpierw wyciaga wszystkie rekordy o najmniejszym id (najwczesniejsze) po grupowane wedlug user_id i nastepnie do wyniku dolacza te rekordy ze wszystkimi danymi, ktorych record_id jest wsrod wyciagnietych w podzapytaniu.
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: 9.10.2025 - 06:52