结合2个MySQL查询

尼基塔웃

我有2个查询:

SELECT     sql_cache distinct p.products_image, 
           p.products_subimage1, 
           pd.products_name, 
           p.products_quantity, 
           p.products_model, 
           p.products_ordered, 
           p.products_id, 
           p.products_price, 
           p.products_date_added, 
           p.products_weight, 
           p.products_length, 
           p.products_width, 
           p.products_height, 
           p.products_tax_class_id, 
           p.products_status, 
           IF(s.status, s.specials_new_products_price, NULL)             AS specials_new_products_price,
           IF(s.status, s.specials_new_products_price, p.products_price) AS final_price 
FROM       products p 
LEFT JOIN  specials s 
ON         p.products_id = s.products_id 
LEFT JOIN  products_to_categories p2c 
ON         p.products_id=p2c.products_id 
LEFT JOIN  products_description pd 
ON         p.products_id=pd.products_id 
INNER JOIN filter_association_products fap 
ON         p.products_id =fap.products_id 
LEFT JOIN  products_attributes pa 
ON         p.products_id = pa.products_id 
WHERE      p.products_status = '1' 
AND        date_sub(curdate(),INTERVAL 3000 day) <= p.products_date_added 
AND        fap.filter_id = 126 
ORDER BY   p.products_date_added DESC, 
           pd.products_name

这给了我52行(产品)的结果。

和一个相同的查询,唯一的区别是:

AND fap.filter_id = 130

这给了我4行的结果。

这些行/产品之间的共同点之一是filter_id130的4中的3也有filter_id126,我想修改查询以仅给出两个(或什至更多,取决于所filter_id应用的)产品的结果。指示的filter_id

我试过了

... 
AND FIND_IN_SET(fap.filter_id,'126', '130') 
ORDER BY p.products_date_added DESC, pd.products_name

但是我得到了53行/产品的结果,这意味着它显示了所有具有两个过滤器的产品,而在这种情况下,我要查找的结果只有三个同时具有两个过滤器的行filter_id

重写查询以获得正确结果的最佳方法是什么?

尼基塔웃

尽管Mikey和Gordon Linoff的回答都不错,但由于其可扩展性,我更喜欢Gordon的方法。但是,他的回答有一些语法错误,并且切换到JOIN并没有产生任何结果,因此我不得不按照Mikey的建议将它们修改回LEFT JOIN。(谢谢你们俩)。这是有效的最终查询:

SELECT     sql_cache distinct p.products_image, 
           p.products_subimage1, 
           pd.products_name, 
           p.products_quantity, 
           p.products_model, 
           p.products_ordered, 
           p.products_id, 
           p.products_price, 
           p.products_date_added, 
           p.products_weight, 
           p.products_length, 
           p.products_width, 
           p.products_height, 
           p.products_tax_class_id, 
           p.products_status, 
           IF(s.status, s.specials_new_products_price, NULL)             AS specials_new_products_price,
           IF(s.status, s.specials_new_products_price, p.products_price) AS final_price 
FROM       products p 
LEFT JOIN  specials s 
ON         p.products_id = s.products_id 
LEFT JOIN  products_to_categories p2c 
ON         p.products_id=p2c.products_id 
LEFT JOIN  products_description pd 
ON         p.products_id=pd.products_id 
INNER JOIN filter_association_products fap 
ON         p.products_id =fap.products_id 
LEFT JOIN  products_attributes pa 
ON         p.products_id = pa.products_id 

WHERE p.products_status = '1' 
AND    date_sub(curdate(),INTERVAL 3000 day) <= p.products_date_added 
AND      fap.filter_id IN (126, 130)
GROUP BY p.products_id
HAVING COUNT(DISTINCT fap.filter_id) = 2;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何结合2个复杂的mysql查询

来自分类Dev

在MySQL中结合2个选择查询

来自分类Dev

MySQL 结合 2 个查询 - 内部连接问题

来自分类Dev

在MySQL上结合4个SELECT查询

来自分类Dev

MySQL-结合两个查询

来自分类Dev

MySQL结合两个查询

来自分类Dev

mysql 结合 3 个查询的输出

来自分类Dev

将2个排序的查询与并集结合

来自分类Dev

将2个排序的查询与并集结合

来自分类Dev

结合 2 个 Django 查询集

来自分类Dev

如何结合2个MySQL函数

来自分类Dev

MySQL高级订购结合了两个查询

来自分类Dev

结合两个mysql查询返回ok而不是行

来自分类Dev

结合2个具有不同条件的选择查询

来自分类Dev

MySQL在一个查询中结合了两个UPDATE查询

来自分类Dev

PHP / MySQL查询合并2个查询

来自分类Dev

结合3个SQL查询

来自分类Dev

如何结合这些mysql查询

来自分类Dev

MySQL结合表查询数据

来自分类Dev

MySQL结合表查询数据

来自分类Dev

如何结合这些mysql查询

来自分类Dev

如何在一个视图中结合两个独立的mysql count查询结果

来自分类Dev

将两个python mysql查询与一个条件结合起来

来自分类Dev

如何结合我2个查询来让我的第二个计数并排

来自分类Dev

如何将这两个查询结合在一起?(MySQL)

来自分类Dev

来自PHP的MySQL查询结合了两个表中的数据

来自分类Dev

将两个 MySQL 查询与计算结合起来

来自分类Dev

优化当前的MySQL查询2个表

来自分类Dev

从MYSQL中的2个表查询