Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] LEFT JOIN
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Mam takie zapytanko do bazy:

  1. SELECT p.*, count(o.id) AS num_orders,
  2. sum(o.refEarn) AS sum_orders,
  3. GROUP_CONCAT( o.id) AS ids
  4. FROM `partners` p
  5. LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0
  6.  
  7. 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 " ):

  1. SELECT p.*, count(o.id) AS num_orders,
  2. sum(o.refEarn) AS sum_orders,
  3. GROUP_CONCAT( o.id) AS ids
  4. FROM `partners` p
  5. LEFT JOIN `order` o ON o.ref=p.id
  6.  
  7. 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 :

  1. SELECT p.*,
  2. count(o.id) AS num_orders,
  3. count(o2.id) AS num_orders_all,
  4. sum(o.refEarn) AS sum_orders,
  5. GROUP_CONCAT( o.id) AS ids,
  6. GROUP_CONCAT( o2.id) AS ids2
  7. FROM `partners` p
  8. LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0
  9. LEFT JOIN `order` o2 ON o2.ref=p.id
  10. 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 :
  1. count(o.id) AS num_orders,
  2. 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 :
  1. LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0

działa tak samo jak:
  1. 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 (IMG:style_emoticons/default/tongue.gif) ? Jeśli tak to proszę napisać, podam więcej szczegółów, czy tam wyłumaczę problem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


NO.. dałem dwa działające zapytania i napisałem, że chce je połączyć w jedno zapytanie. Wydaje mi się, że i bez zrzutu bazy da się to rozwiązać, bo wszystko opisałem... no ale skoro to ma Ci pomóc, to za chwilę wkleje.

  1. CREATE TABLE IF NOT EXISTS `order` (
  2. `id` int NOT NULL AUTO_INCREMENT,
  3. (...)
  4. `ref` int NOT NULL,
  5. `refEarn` float NOT NULL,
  6. PRIMARY KEY (`id`)
  7. );


  1. CREATE TABLE IF NOT EXISTS `partners` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT
  3. (...)
  4. PRIMARY KEY (`id`)
  5. ) ;


Zosawiłem tylko te kolumny, które występują w zapytaniu.

Edit://

Powiem po co są te tabele.

Tabela orders to zamówienia. kolumna Ref, to id partnera (osoby) przez którą to zamówienie zostało wykonane. w refEarns są zarobki jakie zostały przyznane partnerowi za dane zamówienie.

Pierwsze zapytanie, pobiera mi informacje na temat zamówień zrealizowanych, to znaczy takich w których partner zarobił (co się objawia tym, że pole refEarns jest >0 )
Więc mam coś takiego:
Kod
id partnera | ilość zamówień zrealizowanych|  suma jaką partner zarobił | idki zamówień  
1                               3                                        123                                 3,6,8
2                               1                                          32                                  2

Drugie zapytanie, jest podobne. Różni się tylko tym, że pobiera wszystkie zamówienia, a nie tylko te zrealizowane. No i nie interesuje mnie w tym przypadku suma.
Przykładowy wynik:
Kod
id partnera | ilość zamówień wszystkich |  idki zamówień  
1                               5                             3,6,8,10,20
2                               2                               2,5


Teraz chciałbym połączyć te zapytania tak, by jedno zapytanie zwróciło mi, ile mam zamówień wszystkich, ile zamówień zrealizowaych, idki zamówień wszystkich, idki zamóień zrealizowanych oraz suma zamówień zrealziowanych. Niesetety moje zapytanko nie działa, napisałem w pierwszym poście jakie są objawy "niedziałąnia"

Ten post edytował peter13135 8.03.2012, 12:57: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: 11.10.2025 - 16:30