Autor Zpráva
Stepanka
Profil *
Zdravím všechny,

prosím, neporadil by mi někdo ohledně jednoho dotazu?
Vypadá takto:

$query_vse = "SELECT 	s.*, 
							COUNT(op.id_produkt) AS pocet_adresatu, 
							p.id_sk AS id_sk
						FROM skupiny s
						LEFT JOIN produkty p ON s.id = p.id_sk
						LEFT JOIN objednavky_polozky op ON p.id = op.id_produkt
						LEFT JOIN objednavky o ON op.id_objednavka = o.id_objednavka
						LEFT JOIN zakaznici z ON o.id_zakaznik = z.id
						WHERE s.aktivni != '0'
						AND s.web = '".$_GET['eshop']."'
						AND o.jazyk = '".$_GET['lang']."'
						GROUP BY s.nadpis_cz";

a funguje dobře až na jednu věc.
Vypisuje mi pouze ty řádky, kde je pocet_adresatu nenulový. Ale já bych potřebovala vypsat všechny.
Vypisuje mi nadpisy skupin a počty adresátů třeba takto:

Multimédia 3
TV Tunery / Přijímače 15

ale správně by měl vypsat toto:

Multimédia 3
TV Tunery / Přijímače 15
DVD / DivX přehrávače 0
Příslušenství, Kabely, atd. 0
Bazar 0

Nevíte někdo proč to dělá?
Předem moc děkuju za jakékoliv rady
Kajman_
Profil *
Nevíte někdo proč to dělá?

Ta podmínka na objedvávky ve where musí být v on u left joinu. Null nebude nikdy rovno $_GET['lang'].

$query_vse = "SELECT     s.*, 
                            COUNT(op.id_produkt) AS pocet_adresatu, 
                            p.id_sk AS id_sk
                        FROM skupiny s
                        LEFT JOIN produkty p ON s.id = p.id_sk
                        LEFT JOIN objednavky_polozky op ON p.id = op.id_produkt
                        LEFT JOIN objednavky o ON op.id_objednavka = o.id_objednavka AND o.jazyk = '".$_GET['lang']."'
                        LEFT JOIN zakaznici z ON o.id_zakaznik = z.id
                        WHERE s.aktivni != '0'
                        AND s.web = '".$_GET['eshop']."'
                        GROUP BY s.nadpis_cz";
Stepanka
Profil *
Kajman_
Děkuji moc za radu.
Nulové položky to sice zobrazuje, ale tu hodnotu $_GET['lang'] to nebere v úvahu.
Když je nastaveno $_GET['lang'] na "cz", zobrazí mi to úplně stejné řádky a stejné počty adresátů jako když je nastaveno $_GET['lang'] na "en". A to dělat nesmí.
Českých objednávek je mnohem více než anglických, ty čísla se musí lišit.
Nevíš kde by mohla být ještě chyba?

Jinak ale každopádně mockrát děkuji.
Kajman_
Profil *
A jaké počty to dává? Vždy anglické, vždy české, součet obojeho?
Stepanka
Profil *
Kajman_
Nejspíš obojího. Chová se to, jako by tam ten kousek "AND o.jazyk = '".$_GET['lang']."'" vůbec nebyl. Když ho vymažu, vyhodí to stejné výsledky, jako když tam ten daný kousek kódu přidám.
Stepanka
Profil *
Jo, určitě obojího.. Protože sloupec "web" je i u produktů a když ten dotaz změním takto (udělám s GET['eshop'] to samé jako s GET['lang']):

SELECT    s.*, 
                          COUNT(op.id_produkt) AS pocet_adresatu, 
                          p.id_sk AS id_sk
                        FROM skupiny s
                        LEFT JOIN produkty p ON s.id = p.id_sk AND p.web = '".$_GET['eshop']."'
                        LEFT JOIN objednavky_polozky op ON p.id = op.id_produkt
                        LEFT JOIN objednavky o ON op.id_objednavka = o.id_objednavka AND o.jazyk = '".$_GET['lang']."'
                        LEFT JOIN zakaznici z ON o.id_zakaznik = z.id
                        WHERE s.aktivni != '0'
                        GROUP BY s.nadpis_cz";


tak mi to vypíše všechny nadpisy, které tu existují. Prostě jako kdyby tam ta nová podmínka AND nebyla..
Kajman_
Profil *
Jste si jistá tímto
COUNT(op.id_produkt) AS pocet_adresatu ??

Na tenhle count nemá tabulka objednavky přeci žádný vliv.
Stepanka
Profil *
No jistá si nejsem, ale myslela jsem, že tabulka objednavky na to mít vliv bude, když se tam připojí JOINem.. Ale asi opravdu nemá.
Dala jsem místo COUNT(op.id_produkt) AS pocet_adresatu tohle: COUNT(o.id_objednavka) AS pocet_adresatu a zatím se zdá, že to funguje dobře.
Tak zatím mockrát děkuju.
Toto téma je uzamčeno. Odpověď nelze zaslat.