各フィルターはproducts_attributes_values
内の完全に異なるレコードを調べる必要があるため、2つのフィルターは別々に処理する必要があります。 テーブル。
SELECT * FROM products
WHERE category_id IN ('6', '7', '29', '8', '9', '36')
AND id IN (
SELECT product_id
FROM products_attributes_values
WHERE attribute_id = 2
AND value_id = '4')
AND id IN (
SELECT product_id
FROM products_attributes_values
WHERE attribute_id = 3
AND value_id = '11')
UAMotoから:
動作はしますが少し遅いので、ある人が私に言ったように、joinエイリアスを使用しました:
"SELECT * FROM `products`
JOIN `products_attributes_values` AS pav1
ON (`pav1`.`product_id` = `products`.`id`)
JOIN `products_attributes_values` AS pav2
ON (`pav2`.`product_id` = `products`.`id`)
WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` = '4')
AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` = '11')"
属性の組み合わせに関するクエリを更新しました:
SELECT * FROM products
WHERE category_id IN ('6', '7', '29', '8', '9', '36')
AND id IN (
SELECT product_id
FROM products_attributes_values
WHERE attribute_id = 2
AND value_id IN ('4', '5'))
AND id IN (
SELECT product_id
FROM products_attributes_values
WHERE attribute_id = 3
AND value_id IN ('11', '62'))
または
SELECT *
FROM `products`
JOIN `products_attributes_values` AS pav1 ON (`pav1`.`product_id` = `products`.`id`)
JOIN `products_attributes_values` AS pav2 ON (`pav2`.`product_id` = `products`.`id`)
WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` IN ('4', '5'))
AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` IN ('11', '62'))