![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 9.05.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
kolejny dzień ślęczenia nad zapytaniem i nic. Wątek http://forum.php.pl/viewtopic.php?t=6692 przestudiowałem dość szczegółowo i nie potrafiłem zrobić swojego zapytania. Mam 3 table: agenci, firmy, produkty. Chcę zliczyć ile każdy agent pozyskał produktów i firm. Nie będę rozpisywał poszczególnych atrybutów dla każdej z tabel. Wszystko widać z zapytań. Może jednak nie widać, bo coś się nie mogę doczekać odpowiedzi. Więc powiem tylko te najważniejsze: agents_pl: agent_id firms_pl_transact: firm_id, agent_id products_pl_transact: product_id, firm_id, agent_id. Zapytanie o liczbę firm wygląda tak i działa o.k.: [sql:1:b467487e3b] select a.firstname 'Imię', a.lastname 'Nazwisko', count(f.agent_id) as 'Liczba firm' from agents_pl a left join firms_pl_transact f on (a.agent_id = f.agent_id) WHERE a.active_i = 1 AND a.agent_id not in (1, 2) group by a.agent_id order by 'Liczba firm' desc, a.lastname; [/sql:1:b467487e3b] Analogicznie zapytanie o liczbę produktów wygląda tak i działa o.k.: [sql:1:b467487e3b] select a.firstname 'Imię', a.lastname 'Nazwisko', count(p.agent_id) as 'Liczba produktów' from agents_pl a left join products_pl_transact p on (a.agent_id = p.agent_id) WHERE a.active_i = 1 AND a.agent_id not in (1, 2) group by a.agent_id order by 'Liczba produktów' desc, a.lastname; [/sql:1:b467487e3b] No i teraz potrzebuję zapytania, które da mi sumę tych firm i produktów. Niestety w tej postaci, jak poniżej, dostaję co prawda jakieś wyniki, ale są bzdurne. [sql:1:b467487e3b] select a.firstname 'Imię', a.lastname 'Nazwisko', count(p.agent_id) + count(f.agent_id) as 'Liczba umów' from agents_pl a left join products_pl_transact p on (a.agent_id = p.agent_id) left join firms_pl_transact f on (a.agent_id = f.agent_id) WHERE a.active_i = 1 AND a.agent_id not in (1, 2) group by a.agent_id order by 'Liczba umów' desc, a.lastname [/sql:1:b467487e3b] Help me. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 19 Pomógł: 0 Dołączył: 9.05.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mysql podzapytania obsluguje od wersji 4.1, jednakze jest to wersja poki co alfa. Produkcyjne 4.0.x nie obsluguja podzapytan.
Dlaczego nie mozesz miec tego w dwoch zapytaniach i zsumowac to tam gdzie wywolujesz ? Hmm, więc jednak z podzapytaniami się nie da. A co do rozwiązania podanego przez Ciebie, to już dawno coś musiałem wymyśleć, bo potrzebowałem, żeby to zrobić. Jednak przy moim rozwiązaniu nie tworzę tymczasowej tabeli w bazie, tylko wyniki obu zapytań zapisuję w tablicy w php'ie, potem ładnie sortuję tą tablicę po jednym z jej wymiarów i odczytuję dane. Z tym, że przy tym rozwiązaniu napotkałem kolejny problem. Otóż mam tablicę: [php:1:098d87ff23] <?php $tab3 = array("id", "imie", "nazwisko", "ile_razem"); ?> [/php:1:098d87ff23] a w niej mam zapisane to, co odczytałem przy pomocy tych moich 2 zapytań, pole ile_razem to jest suma tego co odczytałem z pierwszego zapytania i tego, co odczytałem z drugiego zapytania. Teraz, żeby ładnie wyświetlić dane z tej tablicy muszę posortować tą tablicę. [php:1:098d87ff23] <?php array_multisort($tab3["ile_razem"], SORT_DESC, SORT_NUMERIC, $tab3["id"], $tab3["imie"], $tab3["nazwisko"]); ?> [/php:1:098d87ff23] I tu się pojawia pewien problem, bo o ile są różne wartości w ile_razem, to wszystko jest o.k., to kiedy kilku agentów ma taką samą wartość ile_razem, to chciałbym, żeby wówczas ta tablica była posortowana wg nazwiska. Jak to zrobić? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 19:38 |