Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 12. 11. 2014, 00:34:33
Pozdravujem
neviem si rady s tymto dodazom "SELECT p.id_produktu, p.produkt, p.url_produktu, p.cena, p.obrazok, a.hodnota_atributu, pa.cena FROM produkty p LEFT JOIN produkt_atributy pa USING(id_produktu) LEFT JOIN atributy a USING(id_atributu) WHERE id_produktu IN (".implode(",", array_map("intval",array_keys($session))).") AND id_atributu IN (".implode(",", array_map("intval",$attr)).") ORDER BY p.produkt DESC" Toto mi vrati iba tie produkty ktore maju atribut ale nevrati mi to tie produkty ktore atribut nemaju uz som skusal vsetko mozne ... Ak vie niekto poradit budem vdacny vdaka M. |
||
juriad Profil |
#2 · Zasláno: 12. 11. 2014, 00:55:27
Monkeys:
Přesuň podmínku z řádku 7 do JOINU na řádku 5 (budeš muset nahradit USING za ON). Tak se stane ta podmínka povinnou pouze pro záznamy, které atributy mají. |
||
Monkeys Profil * |
#3 · Zasláno: 12. 11. 2014, 01:08:09
juriad:
Vdaka za odpoved no neriesi to moj problem vrati to len tie ktore maju atributy ja potrebujem vsetko teda aj tie co atributy nemaju. Nakoniec podlhom rozmyslani som to vyriesil takto, a funguje to ako ma, teda dufam :) "SELECT p.id_produktu, p.produkt, p.url_produktu, p.cena, p.obrazok, a.hodnota_atributu, pa.cena FROM produkty p LEFT JOIN produkt_atributy pa USING(id_produktu) LEFT JOIN atributy a USING(id_atributu) WHERE IF(a.id_atributu IS NULL, p.id_produktu IN (".implode(",", array_map("intval",array_keys($session)))."), a.id_atributu IN (".implode(",", array_map("intval",$attr)).") ) ORDER BY p.produkt DESC" |
||
Kajman Profil |
Monkeys:
„ja potrebujem vsetko teda aj tie co atributy nemaju“ Proto ta podmínka patří do left joinu viz [#2]: SELECT p.id_produktu, p.produkt, p.url_produktu, p.cena, p.obrazok, a.hodnota_atributu, pa.cena FROM produkty p LEFT JOIN produkt_atributy pa ON pa.id_produktu=p.id_produktu AND pa.id_atributu IN (".implode(",", array_map("intval",$attr)).") LEFT JOIN atributy a USING(id_atributu) WHERE p.id_produktu IN (".implode(",", array_map("intval",array_keys($session))).") ORDER BY p.produkt DESC Rozdíl mezi tímto dotazem a z [#3] je v zobrazení řádků, které mají nějaký atribut, ale nemají žádný z hledaných. |
||
Monkeys Profil * |
#5 · Zasláno: 12. 11. 2014, 10:53:01
Kajman:
Dakujem za priklad. Este sa chem opytat, su podmienky typu IF a CASE zatazou pri vyhodnocovani dotazu vacsich tabuliek ? vdaka M. |
||
Kajman Profil |
#6 · Zasláno: 12. 11. 2014, 12:14:39
Někdy to může způsobit zásadní zpomalení, někdy nepatrné. Je potřeba si to změřit a kouknout na explain. Při if a case např. ve where části často přijdete o možnost využítí indexů.
|
||
Časová prodleva: 9 let
|
0