Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个条件的Mysql查询_Mysql_Sql_Prestashop - Fatal编程技术网

具有多个条件的Mysql查询

具有多个条件的Mysql查询,mysql,sql,prestashop,Mysql,Sql,Prestashop,我必须得到多个类别的产品(Prestashop数据库) 这是我的问题: SELECT COUNT( cp.`id_product` ) AS total FROM `ps_product` p INNER JOIN ps_product_shop product_shop ON ( product_shop.id_product = p.id_product AND product_shop.id_shop =1 ) LEFT JOIN `ps_category_product` cp O

我必须得到多个类别的产品(Prestashop数据库)

这是我的问题:

SELECT COUNT( cp.`id_product` ) AS total
FROM  `ps_product` p
INNER JOIN ps_product_shop product_shop ON ( product_shop.id_product = p.id_product
AND product_shop.id_shop =1 ) 
LEFT JOIN  `ps_category_product` cp ON p.`id_product` = cp.`id_product` 
WHERE cp.`id_category` =6
AND cp.`id_category` =126
AND product_shop.`visibility` 
IN (
"both",  "catalog"
)
AND product_shop.`active` =1
我想选择内部类别6和内部类别126,但我的查询返回0

一个产品可以有多个类别,因此我只想在两个类别中选择产品

如何解决这个问题,使我得到预期的结果?

使用

WHERE cp.`id_category` =6
OR cp.`id_category` =126
朋友,试试这个

SELECT COUNT( cp.id_product ) AS total
FROM  ps_product p
Left JOIN ps_product_shop product_shop ON ( product_shop.id_product = p.id_product
                                            AND product_shop.id_shop =1 ) 
LEFT JOIN  ps_category_product cp ON p.id_product = cp.id_product 
            and cp.id_category in(6)
LEFT JOIN  ps_category_product cp1 ON p.id_product = cp1.id_product 
            and cp1.id_category in(126)
WHERE cp.id_category is not null
    and cp1.id_category is not null
    AND product_shop.visibility IN ('both',  'catalog')
    AND product_shop.active =1

你是说6到126之间?无法针对6和126的一列进行验证。如果介于两者之间,则使用

SELECT COUNT( cp.`id_product` ) AS total
FROM  `ps_product` p
INNER JOIN ps_product_shop product_shop ON ( product_shop.id_product = p.id_product
AND product_shop.id_shop =1 ) 
LEFT JOIN  `ps_category_product` cp ON p.`id_product` = cp.`id_product` 
WHERE cp.`id_category` between 6 and 126
AND product_shop.`visibility` 
IN (
"both",  "catalog"
)
AND product_shop.`active` =1
在这两个类别中:

SELECT COUNT( cp.id_product ) AS total
FROM  ps_product p
Left JOIN ps_product_shop product_shop ON (product_shop.id_product = p.id_product
                                           AND product_shop.id_shop = 1)     
WHERE product_shop.visibility IN ('both',  'catalog')
  AND product_shop.active = 1
  AND EXISTS(SELECT * FROM ps_category_product cp 
             WHERE p.id_product = cp.id_product AND cp.id_category = 6)
  AND EXISTS(SELECT * FROM ps_category_product cp 
             WHERE p.id_product = cp.id_product AND cp.id_category = 12)

不是那样。我只想要这些类别的产品,不是全部在第6类和第126类内部。它返回第6类和第126类中的产品,但不是仅在这两个类别中的产品。内部是什么意思?请举例说明。我有两种产品属于第6类。我有3种126类产品。只有一个产品有类别6和126,所以,我只想要一个结果!所以你们想要产品,这在两个类别中都有?仍然在寻找最好的选择。而不是cp.id_category=6和cp.id_category=126。在(6126)中使用cp.id_类别。检查下面的完整代码。不使用内部连接,仅在类别6和126中使用左连接编号
WHERE (cp.`id_category` = 6 OR cp.`id_category` = 126)
AND product_shop.`visibility` IN ("both",  "catalog")
AND product_shop.`active` = 1
SELECT COUNT( cp.id_product ) AS total
FROM  ps_product p
Left JOIN ps_product_shop product_shop ON (product_shop.id_product = p.id_product
                                           AND product_shop.id_shop = 1)     
WHERE product_shop.visibility IN ('both',  'catalog')
  AND product_shop.active = 1
  AND EXISTS(SELECT * FROM ps_category_product cp 
             WHERE p.id_product = cp.id_product AND cp.id_category = 6)
  AND EXISTS(SELECT * FROM ps_category_product cp 
             WHERE p.id_product = cp.id_product AND cp.id_category = 12)