Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Znowu left joiny
kasztan
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kasztan
post
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ć?
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: 4.10.2025 - 19:38