Autor | Zpráva | ||
---|---|---|---|
Ugo Profil |
#1 · Zasláno: 23. 12. 2011, 13:06:07 · Upravil/a: Ugo
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) 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) SELECT * FROM `products` p WHERE EXISTS (select * from product_params where product_id=p.id and param_value_id=1) v podstatě jde jen o to jestli neexistuje nějaký lehčí a méně náročný zápis |
||
Tori Profil |
#2 · Zasláno: 23. 12. 2011, 14:11:27
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 |
#3 · Zasláno: 23. 12. 2011, 14:20:52 · Upravil/a: Ugo
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) 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 |
||
Časová prodleva: 12 let
|
0