簡體   English   中英

MySQL產品按多個屬性過濾

[英]MySQL Product filters by multiple attributes

如何獲得具有所有要求屬性的產品

SELECT * FROM `oc_product_attribute` WHERE (`attribute_id`=15 AND `text`="2500") OR (`attribute_id`=18 AND `text`="24")

此請求,返回以下結果:

|product_id | attribute_id | language_id | text
+-----------+--------------+-------------+-----
|1          | 15           | 1           | 2500
|2          | 15           | 1           | 2500
|3          | 15           | 1           | 2500
|4          | 15           | 1           | 2500
|3          | 18           | 1           | 24  
|4          | 18           | 1           | 24  

但我只需要乘積3和4,因為它們的乘積為15 = 2500和18 = 24。 我該怎么做?

如果要匹配多個條件並返回匹配所有條件的值,則可以使用此方法

select p1.* from oc_product_attribute p1
where 
p1.`attribute_id`=15 AND p1.`text`='2500'
and exists
(
  select 1 from oc_product_attribute p2
  where
  p2.attribute_id = 18 
  and p2.text = 24
  and p1.product_id = p2.product_id
)
union all
select p1.* from oc_product_attribute p1
where 
p1.`attribute_id`=18 AND p1.`text`='24'
and exists
(
  select 1 from oc_product_attribute p2
  where
  p2.attribute_id = 15 
  and p2.text = 2500
  and p1.product_id = p2.product_id
)
;
SELECT product_id 
  FROM oc_product_attribute
 WHERE (attribute_id,text) IN ((15,'2500'),(18,'24')) 
 GROUP 
    BY product_id 
HAVING COUNT(DISTINCT attribute_id,text) = 2;

我覺得這個速記法否定了索引的使用,但希望您能理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM