Autor Zpráva
Ugo
Profil
Ahoj, mám 2 tabulky -
params_product - obsahuje jen param_value_id a product_id
a products - obsahuje ono product_id (id)

potřebuji hledat podle param_id, ty si v PHP připravím jako pole. Podmínka kdy to má vybrat řádek (produkt) je relativně lehká, když to najde všechny řádky, kde params_id je daná hodnota, když je zadáno 6 hodnot a 1 to nenajde, nemá to nic vybrat. Snad je to pochopitelný a nenapsal jsem lehko vysvětlitelnou věc naprosto nepochopitelně.

Věděl bych jak na to nějakými složitějšími složenými dotazy, ale tomu se chci vyhnout.

Dík

Edit pro upresneni:
tabulka params_product (sloupce param_value_id, product_id)
1 - 1
2 - 1

SELECT * FROM `products` p WHERE EXISTS (select * from product_params where product_id=p.id and param_value_id=1) AND  EXISTS (select * from product_params where product_id=p.id and param_value_id=2) AND EXISTS (select * from product_params where product_id=p.id and param_value_id=3)
nemá projít

SELECT * FROM `products` p WHERE EXISTS (select * from product_params where product_id=p.id and param_value_id=1) AND  EXISTS (select * from product_params where product_id=p.id and param_value_id=2)
má projít

SELECT * FROM `products` p WHERE EXISTS (select * from product_params where product_id=p.id and param_value_id=1)
má projít

v podstatě jde jen o to jestli neexistuje nějaký lehčí a méně náročný zápis
Tori
Profil
Jde teda o to, aby produkt neměl míň vlastností, než je požadováno. Zkuste tohle (píšu z hlavy):
$params = array(1,2);
$ids = implode(',', $params);
$pocet = count($params);
SELECT p.*, COUNT(*) 'pocet' FROM `products` p
INNER JOIN `product_params` pp ON pp.`product_id` = p.`id` AND pp.`param_value_id` IN ( $ids )
GROUP BY p.`id` 
HAVING `pocet` >= $pocet
Ugo
Profil
hups tak to jsem neupřesnil zcela správně :) jde o to abych v hledání neměl žádnou kterou má on (jde o filtrování a vlastnosti jsou selectboxy, čili musí se shodovat všechny vybrané)

čili param_id - 3 by projít nemělo i když je samostatně

SELECT * FROM `products` p WHERE EXISTS (select * from product_params where product_id=p.id and param_value_id=3)
(nemá projít)


Ale koukám na ten dotaz a mělo by to fungovat, vyzkouším - díky moc :)


Tori:
Ano skutečně funguje perfektně, dokonalý jednoduchý nápad, ještě jednou děkuji, a server děkuje také, tomu se uleví nejvíc :D

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0