Klingt so, als müssten Sie GROUP BY
verwenden und HAVING
Klauseln.
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 */
Stellen Sie sicher, dass Sie einen eindeutigen Index für product_id
haben und attr_id
damit dies ordnungsgemäß funktioniert (Sie sollten dies bereits haben, da es für ein Produkt wahrscheinlich nicht sinnvoll wäre, mehrere Datensätze mit derselben attr_id
zu haben ).
Sie müssen auch sicherstellen, dass Sie Ihre Werte für die Verwendung in Ihrem SQL-Code maskieren, falls dies noch nicht geschehen ist. Ich zeige diese Variablen hier mit ?
was, wenn Sie vorbereitete Anweisungen verwenden, eine Möglichkeit wäre, diese SQL zu schreiben.