Autor Zpráva
Monkeys
Profil *
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
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 *
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 *
Kajman:

Dakujem za priklad.
Este sa chem opytat, su podmienky typu IF a CASE zatazou pri vyhodnocovani dotazu vacsich tabuliek ?

vdaka
M.
Kajman
Profil
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ů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: