Autor Zpráva
Pavel Dumbrovský
Profil
Dobrý den,
už jsem zoufalej a prosím o radu..

Mám dotaz:
SELECT products.id AS id, ean FROM products INNER JOIN products_lang ON (products.id = products_lang.product_id) INNER JOIN product_to_image ON (products.id = product_to_image.product_id) WHERE products_lang.language_id = '1' AND products.aktiv_de = '1' AND varianta='0' AND products.aktiv='1' and image!='default' AND (`product_to_image`.`poradi`='1' OR (`product_to_image`.`poradi`='2' AND NOT EXISTS (SELECT * FROM `product_to_image` WHERE `product_id` = `id` AND `poradi`='1') ))

ale důležitá je z něj tato pasáž:
AND (`product_to_image`.`poradi`='1' OR (`product_to_image`.`poradi`='2' AND NOT EXISTS (SELECT * FROM `product_to_image` WHERE `product_id` = `id` AND `poradi`='1') ))

Zkrátka chci vypsat produkty, které mají obrázek s pořadím 1 a nebo 2 (ale pak nesmí mít 1, aby mi to nevypisovalo víc než jeden).
Za boha mi to nechce jeden produkt vypsat, i když má v databázi záznam pouze s poradi=2, když místo NOT EXISTS dám EXISTS, tak mi ho to vypíše, naprosto to nechápu.

Nemá prosím někdo tušení, co je tohle za chování?

Díky moc.
Kajman
Profil
Před sloupečky jasně definujte, z jaké tabulky se mají použít (vnitřní a vnější dejte jiné aliasy).
Pavel Dumbrovský
Profil
Děkuju, už to funguje, ale načtení z DB trvá tak dlouho, že se ani stránka nenačte.. To mám asi smůlu co, nejde ten dotaz nějak zrychlit..


Nebo takhle, mně by bohatě stačilo, když by šlo udělat něco jako
AND (`product_to_image`.`poradi`='1' OR `product_to_image`.`poradi`='2' LIMIT 1) zkrátka aby tam byl vždy jen jeden, primárně ten první..
Nemáte zkušenost, jestli to nějak lze?
Kajman
Profil
Z tabulky obrázků Vás zajímá jen sloupec ean?
Pavel Dumbrovský
Profil
Ne, prim hraje id, protože pak je tam cyklus a v něm se znovu několikrát prohledávájí další tabulky právě podle toho ID.. Jakmile tam ale hodím to NOT EXISTS a další select, tak DB padá na zadek..
Kajman
Profil
Pokud z tabulky obrázků nic nepotřebujete, tak snad stačí ten jednoduchý or (poradi in (1,2)) a na id produktů použít distinct nebo group by.
Pavel Dumbrovský
Profil
Kajman:
Díky moc, prosté jako bulharská striptérka.. :)
V SQL nejsem zrovna guru, ovládám základní příkazy, distinct jsem vůbec neznal.. Jestli jsem to správně pochopil, tak to z vyhovujících podmínek vybere vždy jen jednu položku?
Kajman
Profil
Distinct omezí řádky na jedinečnou kombinaci vypisovaných hodnot.

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: