Autor Zpráva
Stepanka
Profil *
Ahoj,

prosím, pomozte někdo...

Mám dvě tabulky v e-shopu: Zakaznici a Objednavky

A potřebuju vypsat 10 zákazníků, kteří v e-shopu nejvíce utratili.

Vypíšu tady sloupce daných tabulek, aby to bylo zřetelnější:

Tabulka OBJEDNAVKY:
id_objednavka, id_zakaznik, doprava, doprava_cena, celkem_bez_dph, celkem_s_dph, celkem_poplatek, celkova_cena, nazev, ic, dic, jmeno, prijmeni, email, ulice, cislo, obec, psc, zeme, ulice_dod, cislo_dod, obec_dod, psc_dod, zeme_dod, telefon, poznamka,zak_cislo, datum, stav, jazyk, web, id_dopravce, id_dopravce_stat, datum2, id_platba, platba, typ_karty, platba_hash.


Tabulka ZAKAZNICI:
id,uz_jm, heslo, nazev, ic, dic, jmeno, prijmeni, email, ulice, cislo, obec, psc, zeme, id_stat_fakturacni, ulice_dod, cislo_dod, obec_dod,psc_dod, zeme_dod, id_stat_dodaci, dodaci_adr_jina, telefon, poznamka, icq, platebni_lhuta, druh, datum, aktivni.



A já bych potřebovala zobrazit tabulku, kde v jednotlivých sloupcích bude jméno a příjmení zákazníka, potom částka, kterou utratil a za třetí počet jeho objednávek.

Můj problém je ale v tom, že pokud je ten zákazník neregistrovaný (zakaznici.uz_jm = 'bez_registrace') musím vybrat údaje (počet jeho objednávek a tržba) podle jeho e-mailu. Protože vždycky když nakoupí jako neregistrovaný, dostane nový hash ID, a že je to ten samý, jako minule poznám jen podle toho, že má stejný email.

No a druhý případ je pro registrované (zakaznici.uz_jm <> 'bez_registrace'). Tam potřebuju vybrat údaje podle ID zákazníka. Protože jeho ID se nemění, ale za to on jako registrovaný si může změnit email..

Doufám, že jsem to napsala aspoň trochu srozumitelně.

Dotaz, co zatím mám vypadá takto, ale nefunguje dobře:

SELECT 
o.jmeno AS jmeno,
o.prijmeni AS prijmeni,
o.email AS email,
count(o.id_objednavka) AS pocet_objednavek,
sum(o.celkem_bez_dph) as celkem_bez_dph 
FROM objednavky o 
JOIN zakaznici z ON z.email = o.email 
AND z.uz_jm = 'bez_registrace'
GROUP BY o.email

UNION
						
SELECT 
o.jmeno AS jmeno,
o.prijmeni AS prijmeni,
o.email AS email,
count(o.id_objednavka) AS pocet_objednavek,
sum(o.celkem_bez_dph) as celkem_bez_dph 
FROM objednavky o 
JOIN zakaznici z ON z.id = o.id_zakaznik 
AND z.uz_jm <> 'bez_registrace'
GROUP BY z.id 
ORDER BY celkem_bez_dph DESC
LIMIT 10
") or die(err(1)); 


Nepomohl by mi, prosím, někdo s jeho správným sestavením?

Děkuju.
Stepanka
Profil *
ok, asi to zní složitě, když všichni mlčíte.. zeptám se jinak...

Můžu mít v dotazu 2x GROUP BY?

Potřebovala bych rozjet něco takového:

SELECT 
o.jmeno AS jmeno,
o.prijmeni AS prijmeni,
o.email AS email,
count(o.id_objednavka) AS pocet_objednavek,
sum(o.celkem_bez_dph) as celkem_bez_dph,
IF(z.uz_jm='bez_registrace', z.email, z.id) AS udaj

FROM objednavky o 
JOIN zakaznici z ON z.id = o.id_zakaznik 
IF(z.uz_jm='bez_registrace', GROUP BY z.email, GROUP BY z.id) 
ORDER BY celkem_bez_dph DESC
LIMIT 10


ale bez errorů...
nightfish
Profil
Stepanka
k tomu prvnímu dotazu...
(SELECT ....) UNION (SELECT ...)
Stepanka
Profil *
nightfish
Super, díky ;-)

A k druhému dotazu by rada nebyla? Existuje vůbec něco takového?
Kajman_
Profil *
GROUP BY IF(z.uz_jm='bez_registrace',  z.email, z.id)
Stepanka
Profil *
Kajman_
Přesně tohle jsem potřebovala. Děkuji mockrát! ;-)
Toto téma je uzamčeno. Odpověď nelze zaslat.