[ wela @ 01.04.2015. 15:17 ] @
Potrebno mi je da iz phpMyadmin napravim izveštaj koji sadrži osnovne podatke o kupcima (ime, prezime, telefon, adresa, država) i ukupna suma koju su potrošili.
Uspeo sam da dobijem šta mi treba iz dva različita upita, ali kako nemam dovoljno iskustva sa SQLom, ne ide mi nikako da ih spojim.
Prvi deo sam dobio tako što sam koristio sledeći upit:

Kod:
SELECT A.firstname, A.lastname, A.email, A.birthday, B.phone, B.phone_mobile, B.address1, B.address2, B.postcode, B.city, C.name
FROM ps_customer AS A
LEFT JOIN ps_address AS B ON ( B.id_customer = A.id_customer )
LEFT JOIN ps_country_lang AS C ON ( C.id_country = B.id_country )

A ukupna suma koja je potrošena po id_customer sam dobio sledećim upitom:

Kod:
SELECT id_customer, SUM( total_paid_real )
FROM ps_orders
GROUP BY id_customer

Ono što mi treba je da objedinim ova dva upita u jedan i dobijem jedan izveštaj, probao sam dosta varijanti, ali negde sam nešto prevideo.

Hvala unapred.
[ bogdan.kecman @ 01.04.2015. 15:28 ] @
prvi upit vraca 11 kolona u rezultatu
drugi upit vraca 2 kolone u rezultatu

kako zelis da ih spojis?

zelis da dodas SUM( total_paid_real ) kao 12tu kolonu u prvi rezultat? ili nesto drugo
[ wela @ 01.04.2015. 15:35 ] @
Bogdane,

Hvala na brzom odgovoru. Da, želim da dodam Sum kao 12tu kolonu gde ću imati sortirano koliko je koji kupac ukupno potrošio.

Hvala.
[ bogdan.kecman @ 01.04.2015. 15:51 ] @
tu sada imas jedan problem, prvi upit teoretski moze da ima vise kolona sa istim id_customer a drugi upit ima za svaki id_customer samo jedan slog u rezultatu

na brzaka ovako nesto bi trebalo da sljaka

Code:

SELECT 
  A.firstname, A.lastname, A.email, A.birthday, B.phone, B.phone_mobile, B.address1, B.address2, B.postcode, B.city, C.name, SUM( X.total_paid_real )
FROM 
  ps_customer AS A
  LEFT JOIN ps_address AS B ON ( B.id_customer = A.id_customer ) 
  LEFT JOIN ps_country_lang AS C ON ( C.id_country = B.id_country )
  JOIN (SELECT id_customer, SUM( total_paid_real ) suma FROM ps_orders GROUP BY id_customer) X USING (id_customer)


takodje bi mogao samo da ubacis u celu pricu i ps_orders i da se nadas da je optimizer dovoljno pametan

Code:

SELECT 
  A.firstname, A.lastname, A.email, A.birthday, B.phone, B.phone_mobile, B.address1, B.address2, B.postcode, B.city, C.name, X.suma
FROM 
  ps_customer AS A
  LEFT JOIN ps_address AS B ON ( B.id_customer = A.id_customer ) 
  LEFT JOIN ps_country_lang AS C ON ( C.id_country = B.id_country )
  JOIN ps_orders as X USING (id_customer)
GROUP BY X.id_customer

[ wela @ 02.04.2015. 08:03 ] @
Sa Group by sam uspeo da dobijem šta mi treba:

SELECT A.firstname, A.lastname, A.email, A.birthday, B.phone, B.phone_mobile, B.address1, B.address2, B.postcode, B.city, C.name, SUM(D.totail_paid_real)
FROM ps_customer AS A
LEFT JOIN ps_address AS B ON ( B.id_customer = A.id_customer )
LEFT JOIN ps_country_lang AS C ON ( C.id_country = B.id_country )
LEFT JOIN ps_orders AS D ON (A.id_customer=D.id_customer) GROUP BY 1,2

Hvala puno
[ bogdan.kecman @ 02.04.2015. 11:15 ] @
ne valja ti to, uradio si group by po firstname, lastname a treba da uradis po id posto moze da ti se desi da imas 2 komada sa istim firstname/lastname (vrlo cest slucaj)
[ wela @ 02.04.2015. 15:32 ] @
Da, video sam to posle. Sada sam stavio po GROUP BY po email-u koji ne može da se duplira.
[ bogdan.kecman @ 02.04.2015. 16:21 ] @
stavi group by po id-u kako sam ti stavio u drugom primeru, po tom id-u
valjda imas index valjda je primarni u glavnoj tabeli ...