如何获取包含两个术语category type和group type的产品id

eh57zj3b  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(330)

如何获取包含类别类型和组类型两个术语的产品标识
我有一个表ec\ U条款

电子商务术语产品

如何获取包含alias best offers和高级车的产品标识?
在这种情况下,产品id应该是4。
试过了,但什么也没出来

SELECT *, count(ec_terms_product.product_id) AS coutp 
FROM ec_terms_product 
LEFT JOIN ec_terms 
ON ec_terms_product.term_id = ec_terms.id 
WHERE 1=1 
AND (ec_terms.alias IN ('best-offers') AND ec_terms.alias IN ('premium-cars'))
GROUP BY ec_terms_product.term_id ,ec_terms_product.product_id

你能帮我吗?

whhtz7ly

whhtz7ly1#

分组依据 product_id .
使用带有distinct的group\ U concat,以逗号分隔的字符串获取产品的所有不同别名。
在having子句中使用find\ in\ set函数,可以过滤出产品id
你不需要这么做 Left Join 因为您只想考虑那些具有别名值的产品标识。所以,简单地使用 Inner join .
请尝试以下操作:

SELECT etp.product_id, 
       GROUP_CONCAT(DISTINCT et.alias) AS aliases 
FROM ec_terms_product AS etp 
INNER JOIN ec_terms AS et 
ON etp.term_id = et.id 
GROUP BY etp.product_id 
HAVING FIND_IN_SET('best-offers', aliases) > 0 
   AND FIND_IN_SET('premium-cars', aliases) > 0
332nm8kg

332nm8kg2#

简单使用 group by 以及 having :

SELECT etp.product_id
FROM ec_terms_product etp JOIN
     ec_terms et 
     ON etp.term_id = et.id 
GROUP BY etp.product_id 
HAVING SUM(et.alias = 'best-offers') > 0 AND
       SUM(at.alias = 'premium-cars') > 0;

请注意 LEFT JOIN 没有必要。一 LEFT JOIN 只会增加查询的开销。
更有效的方法是:

SELECT etp.product_id
FROM ec_terms_product etp JOIN
     ec_terms et 
     ON etp.term_id = et.id 
WHERE et.alias IN ('best-offers', 'premium-cars')
GROUP BY etp.product_id 
HAVING COUNT(*) = 2;

相关问题