Autor Zpráva
Draffix
Profil
Zdravím, řeším teď problém, se kterým nevím pohnout. Mám dvě tabulky, product a image. Spojit není problém, chyba nastává až když chci využít dvakrát klauzuli LIKE

Mám tyto produkty s obrázky:


Když pak ale chci vybrat ty, které mají v textu nebo nadpisu "mi":
SELECT product.prod_id, product.prod_name, product.prod_price, product.prod_describe,
            image.image_id, image.image_name, image.product_prod_id
            FROM product, image 
            WHERE product.prod_id = image.product_prod_id
            AND product.prod_name LIKE "%mi%"
            OR product.prod_describe LIKE "%mi%"
            GROUP BY product.prod_id

tak mi to vyhodí toto:


Takže získám tři správné produkty, ale pouze jeden shodný obrázek pro všechny tři produkty. Nevíte někdo proč to tak vyhazuje? Když bych totiž udělal jen jedno LIKE, tak už je to správně:

SELECT product.prod_id, product.prod_name, product.prod_price, product.prod_describe,
            image.image_id, image.image_name, image.product_prod_id
            FROM product, image 
            WHERE product.prod_id = image.product_prod_id
            AND product.prod_describe LIKE "%mi%"
            GROUP BY product.prod_id

ShiraNai7
Profil
Draffix:

1)

Operátor AND má větší prioritu, takže podmínka platí pokud product.prod_id = image.product_prod_id AND product.prod_name LIKE "%mi%" NEBO product.prod_describe LIKE "%mi%".

Jinou prioritu vynutíš závorkami:

SELECT product.prod_id, product.prod_name, product.prod_price, product.prod_describe,
            image.image_id, image.image_name, image.product_prod_id
            FROM product, image 
            WHERE product.prod_id = image.product_prod_id
            AND (
                    product.prod_name LIKE "%mi%"
                    OR product.prod_describe LIKE "%mi%"
            )
            GROUP BY product.prod_id


2) to seskupování podle prod_id omezuje výsledek .. k čemu to potřebuješ? resp. co se snažíš načíst? třeba na to jdeš špatně
Draffix
Profil
Už to šlape, díky moc, o té prioritě jsem nevěděl

ShiraNai7:
to seskupování podle prod_id omezuje výsledek .. k čemu to potřebuješ? resp. co se snažíš načíst? třeba na to jdeš špatně

Teď už to k ničemu nepotřebuji, ale předtím když jsem měl ten dotaz, tak mi to vyhodilo tohle:


A díky seskupení se mi to zredukovalo pouze na ty tři, bylo to spíše jenom abych měl lepší přehled než že by to splňovalo nějakou funkci. Každopádně ještě jednou díky ;-)
Tori
Profil
Draffix:
O něco vhodnější by bylo použít LEFT JOIN (místo implicitního CROSS JOIN, tj. kartézský součin, tedy přesně to, co jste dostal podle [#3]) a podmínku pro spojení tabulek dát do části ON:
SELECT product.prod_id, product.prod_name, product.prod_price, product.prod_describe,
image.image_id, image.image_name, image.product_prod_id
FROM product
LEFT JOIN image ON product.prod_id = image.product_prod_id
WHERE product.prod_name LIKE "%mi%" OR product.prod_describe LIKE "%mi%"

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: