SELECT p.*, count(o.id) AS num_orders, sum(o.refEarn) AS sum_orders, GROUP_CONCAT( o.id) AS ids FROM `partners` p LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0 GROUP BY p.id
Powyższe zapytanie działa jak trzeba.
Mam też inne zapytanko, które różni się tylko jednym warunkiem (brak "AND o.refEarn>0 " ):
SELECT p.*, count(o.id) AS num_orders, sum(o.refEarn) AS sum_orders, GROUP_CONCAT( o.id) AS ids FROM `partners` p LEFT JOIN `order` o ON o.ref=p.id GROUP BY p.id
To zapytanie również działa poprawnie. Wyniki są inne niż w pierwszym zapytaniu.
Następnie chciałbym te powyższe zapytania połączyć w jedno. Robię to w ten sposób :
SELECT p.*, count(o.id) AS num_orders, count(o2.id) AS num_orders_all, sum(o.refEarn) AS sum_orders, GROUP_CONCAT( o.id) AS ids, GROUP_CONCAT( o2.id) AS ids2 FROM `partners` p LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0 LEFT JOIN `order` o2 ON o2.ref=p.id GROUP BY p.id
Jak widać, "doklejam" left joinem 2-krotnie dane z jednej tabeli, zmieniając tylko "warunki".
Niestety wyniki jakie to zapytanie zwraca nie są zgodne z moimi oczekiwaniami.
W skrócie mówiąc to :
count(o.id) AS num_orders, count(o2.id) AS num_orders_all,
Daje mi idenytyczne wyniki. Z ids i ids2 jest tak samo. Gdy odpalam tamte (dwa pierwsze) zapytania osobno, wyniki są różne, czyli takie chce mieć.
To :
LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0
działa tak samo jak:
LEFT JOIN `order` o2 ON o2.ref=p.id
A nie powinno tak być, bo przecież są różne "warunki" w "o" i "o2".
W jaki sposób rozwiązać mój problem ?
@up
Heloł programiści. Starałem się dokładnie opisać problem. Czy coś jest niejasnego, że nie potraficie mi pomóc
