Có vẻ như bạn cần sử dụng GROUP BY
và HAVING
mệnh đề.
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 */
Đảm bảo rằng bạn có một chỉ mục duy nhất trên product_id
và attr_id
để điều này hoạt động bình thường (bạn nên có điều này vì sẽ không hợp lý nếu một sản phẩm có nhiều bản ghi với cùng một attr_id
).
Bạn cũng cần đảm bảo rằng bạn đang thoát các giá trị của mình để sử dụng trong SQL nếu bạn chưa thoát. Tôi đang hiển thị các biến này ở đây với ?
mà, nếu bạn sử dụng các trạng thái đã chuẩn bị, sẽ là một cách bạn có thể viết SQL này.