Autor | Zpráva | ||
---|---|---|---|
Draffix Profil |
#1 · Zasláno: 14. 12. 2012, 16:57:21
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 |
#3 · Zasláno: 14. 12. 2012, 17:38:25
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%" |
||
Časová prodleva: 11 let
|
0