Det lyder som om du skal bruge GROUP BY
og HAVING
klausuler.
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 */
Sørg for, at du har et unikt indeks på tværs af product_id
og attr_id
for at dette fungerer korrekt (du burde allerede have dette, da det sandsynligvis ikke ville give mening for et produkt at have flere poster med samme attr_id
).
Du skal også sikre dig, at du undslipper dine værdier til brug i din SQL, hvis du ikke allerede er det. Jeg viser disse variabler her med ?
som, hvis du bruger forberedte udsagn, ville være en måde, du kan skrive denne SQL på.