![]() |
![]() |
![]()
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:
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) |
|
|
![]() |
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 11:55 |