Изглежда, че трябва да използвате GROUP BY
и HAVING
клаузи.
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 */
Уверете се, че имате уникален индекс в product_id
и attr_id
за да работи това правилно (вече трябва да имате това, тъй като вероятно няма да има смисъл продуктът да има множество записи със същия attr_id
).
Трябва също така да се уверите, че избягвате стойностите си за използване във вашия SQL, ако все още не сте. Показвам тези променливи тук с ?
което, ако използваме подготвени оператори, би било начин да напишете този SQL.