![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie zapytanko do bazy:
Powyższe zapytanie działa jak trzeba. Mam też inne zapytanko, które różni się tylko jednym warunkiem (brak "AND o.refEarn>0 " ):
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 :
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 :
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 :
działa tak samo jak:
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 ![]() -------------------- :)
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 20 Dołączył: 19.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
trudno z pamieci to rozwiazac jakbys przeslal tabele z danymi i jaki wynik chcesz uzyskac??
|
|
|
![]()
Post
#3
|
|
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.
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 -------------------- :)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 20 Dołączył: 19.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
kiedy doslesz te dane z bazy bo juz utworzylem szkielet tabel ale nie mam ndadal danych i nie wiem co chce osiągnac
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że jakbyś znał się na rzeczy, to byś wiedział
![]() daj sobie do partners idki np 1,2 do orders daj pare rekordów, gdzie ref będzie miało wartość 1 lub 2 w refEarn daj w klilku rekordach 0, a w kilku jakąs "kwotę" np. 10, 20, 32.45. To nie ma znaczenia. No i generalnie wszystko masz opisane wyżej. -------------------- :)
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 20 Dołączył: 19.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
musisz uzyc pierwszego zapytania ktore jest dobre i potem uzyd podzapytanc z drugiet tabeli
np. select a.id_partnera, inna_kolumna,jeszcze_inna,(tutaj podzapytanie np select count(order) from tabela 2 where id_partnera=a.id_partnera) from pierwsza tabela a kolego jak Ci idzie ? sprobuj to: SELECT p.id, count(o.id) AS num_orders, sum(o.refEarn) AS sum_orders, GROUP_CONCAT( o.id) AS ids, (SELECT sum(refearn) AS num_orders FROM `partners` p LEFT JOIN `order` o ON o.ref=p.id and p.id=p.id) as num_orders_partner, (SELECT count(refearn) FROM `order` where ref=p.id) as ilosc_zamowien_wszystkich, (SELECT count(refearn) FROM `order` where ref=p.id and refearn>0) as ilosc_zamowien_wszystkich_pow_zero FROM `partners` p LEFT JOIN `order` o ON o.ref=p.id AND o.refEarn>0 Ten post edytował poli25 8.03.2012, 13:23:52 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
A spróbuj tego:
Dyrektywa union mogłaby połączyć oba zapytania,jeśli się pomyliłem to niech ktoś poprawi. Ten post edytował Niktoś 8.03.2012, 15:02:29 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
WYkonałem 2 pierwsze zapytania, skleilem odtrzymane wynikii array_mergem i jest git
![]() Dzięki za pomoc. -------------------- :)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:58 |