ऐसा लगता है कि आपको GROUP BY use का उपयोग करने की आवश्यकता है और 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 को लिखने का एक तरीका होगा।