Zdá se, že musíte použít GROUP BY
a HAVING
klauzule.
SELECT
`product_id`,
COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
(`attr_id` = ? AND `value_id` = ?)
OR (`attr_id` = ? AND `value_id` = ?)
/* additional as necessary
OR (`attr_id` = ? AND `value_id` = ?)
*/
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */
Ujistěte se, že máte jedinečný index napříč product_id
a attr_id
aby to fungovalo správně (měli byste to již mít, protože by pravděpodobně nedávalo smysl, aby produkt měl více záznamů se stejným attr_id
).
Také se musíte ujistit, že unikáte ze svých hodnot pro použití ve vašem SQL, pokud ještě nejste. Tyto proměnné zde ukazuji pomocí ?
což, pokud použijeme připravené příkazy, by byl způsob, jak napsat tento SQL.