Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie i kolejność wyników
johnson
post
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 2
Dołączył: 3.12.2004

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


Są takie oto rekordy (tabela uzytkownicy):

Kod
+---------+-----------+-------------+
|    id   | zespol_id |    imie     |
+---------+-----------+-------------+
|    1    |     3     |  Karolina   |
|    2    |     3     |  Mateusz    |
|    3    |     3     |  Magda      |
|    4    |     3     |  Andrzej    |
+---------+-----------+-------------+


Teraz grupując zapytaniem:
  1. SELECT count(*) AS liczba, imie, id
  2. FROM uzytkownicy GROUP BY zespol_id


otrzymujemy liczbę użytkowników w danym zespole oraz imię jednego użytkownika w tym teamie oraz jego id, problem polega jednak na tym, że w żaden sposób nie można wpłynąć na to, które imię się wyświetli

Czy można w jakiś sposób wpłynąć na to, które imię się wyświetli (np. posortować alfabetycznie i zwróci się pierwsze; dobrze by też było jakby zwracane było właściwe dla tego użytkownika id)(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
amwoan
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.05.2005

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


Hm, ciekawy trick z tym LEFT JOINEM, muszę przyznać, że go nie znałem. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Człowiek się uczy całe życie. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Natomiast co do dalszej części z grupowaniem to, pomijając, że też ciekawe rozwiązanie, na pewno nie zadziała na PostgreSQL (oraz innych enginach nie pozwalających na wyświetlanie pól bez użycia funkcji agregującej) oraz ma w sobie pewną wadę (możliwe, że do wyeliminowania). Tą wadą jest to, że jeśli istnieją np dwa wiersze z tą samą wartością odpowiadającą jednocześnie MIN, bądź MAX, to COUNT zwróci podwojoną ilość wierszy (im więcej będzie tych wierszy "źródłowych", tym większy będzie iloczyn). Dzieje się tak ze względu na to, że LEFT JOIN zwróci wszystkie wiersze z maksymalną, bądź minimalną wartością jakiegoś pola, a one następnie będą łączone poprzez INNER JOINA. Z tego wynika, że końcowa ilość wierszy, przed zgrupowaniem, jest równa "normalnej" ilości wierszy dla danej wartości pola, po którym następuje grupowanie (np omawiana domena) razy ilość wierszy spełniających warunek max czy min (pozostałe po dokonaniu LEFT JOIN). Nie wiem, czy nie zbyt zawile to opisałem, ale chyba można zrozumieć o co mi chodzi. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Jak nie, a kogoś to interesuje, to postaram się wyjaśnić jaśniej, popierając może przykładem . (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował amwoan 23.05.2005, 18:05:52
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: 3.10.2025 - 11:55