Het klinkt alsof je GROUP BY
. moet gebruiken en HAVING
clausules.
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 */
Zorg ervoor dat u een unieke index heeft voor product_id
en attr_id
om dit correct te laten werken (u zou dit al moeten hebben omdat het waarschijnlijk niet logisch is dat een product meerdere records heeft met dezelfde attr_id
).
U moet er ook voor zorgen dat u uw waarden ontwijkt voor gebruik in uw SQL, als u dat nog niet bent. Ik laat deze variabelen hier zien met ?
wat, als we voorbereide verklaringen gebruiken, een manier zou zijn om deze SQL te schrijven.