Wygląda na to, że musisz użyć GROUP BY
i HAVING
klauzule.
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 */
Upewnij się, że masz unikalny indeks w product_id
i attr_id
aby to działało poprawnie (powinieneś już to mieć, ponieważ prawdopodobnie nie ma sensu, aby produkt miał wiele rekordów z tym samym attr_id
).
Musisz także upewnić się, że zmieniasz znaczenie swoich wartości w celu użycia ich w SQL, jeśli jeszcze tego nie zrobiłeś. Pokazuję tutaj te zmienne za pomocą ?
co, jeśli użyjemy przygotowanych wyciągów, byłoby sposobem na napisanie tego kodu SQL.