Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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如果不等于0,则从列中选择,否则从另一列中选择_Mysql_Where Clause - Fatal编程技术网

mysql如果不等于0,则从列中选择,否则从另一列中选择

mysql如果不等于0,则从列中选择,否则从另一列中选择,mysql,where-clause,Mysql,Where Clause,我有这个疑问 SELECT products.*, colors.name AS colorName, makes.name AS makeName, genders.name AS genderName, GROUP_CONCAT(DISTINCT categories.name ORDER BY categories.name) AS distCategories, G

我有这个疑问

            SELECT 
                products.*, colors.name AS colorName, makes.name AS makeName, genders.name AS genderName,
                GROUP_CONCAT(DISTINCT categories.name ORDER BY categories.name) AS distCategories, 
                GROUP_CONCAT(DISTINCT subcategories.name ORDER BY subcategories.name) AS distSubcategories, 
                GROUP_CONCAT(DISTINCT makes.name ORDER BY makes.name) AS distMakes, 
                GROUP_CONCAT(DISTINCT products_availability.size ORDER BY products_availability.size) AS distSizes 
            FROM products 
                LEFT JOIN colors ON products.color = colors.id 
                LEFT JOIN makes ON products.make = makes.id 
                LEFT JOIN genders ON products.gender = genders.id 
                LEFT JOIN products_and_categories ON products_and_categories.product = products.id 
                LEFT JOIN products_and_subcategories ON products_and_subcategories.product = products.id 
                LEFT JOIN products_availability ON products_availability.product = products.id 
                LEFT JOIN categories ON products_and_categories.category = categories.id 
                LEFT JOIN subcategories ON products_and_subcategories.subcategory = subcategories.id 
            WHERE products.gender IN(5, 6, 7) AND products.type = 5 AND $where 
            GROUP BY(products.id)
            ORDER BY products.id ASC
我希望能够根据价格选择一些产品


如果列
sale\u price
不是0,那么我想说
WHERE sale\u price,在您的案例陈述中稍加修改,我想您可以让它工作。尝试以下方法:

SELECT 
products.*, 
colors.name AS colorName, 
makes.name AS makeName,  
genders.name AS genderName,
GROUP_CONCAT(DISTINCT categories.name ORDER BY categories.name) AS distCategories, 
GROUP_CONCAT(DISTINCT subcategories.name ORDER BY subcategories.name) AS distSubcategories, 
GROUP_CONCAT(DISTINCT makes.name ORDER BY makes.name) AS distMakes, 
GROUP_CONCAT(DISTINCT products_availability.size ORDER BY products_availability.size) AS distSizes 
FROM products 
LEFT JOIN colors ON products.color = colors.id 
LEFT JOIN makes ON products.make = makes.id 
LEFT JOIN genders ON products.gender = genders.id 
LEFT JOIN products_and_categories ON products_and_categories.product = products.id 
LEFT JOIN products_and_subcategories ON products_and_subcategories.product = products.id 
LEFT JOIN products_availability ON products_availability.product = products.id 
LEFT JOIN categories ON products_and_categories.category = categories.id 
LEFT JOIN subcategories ON products_and_subcategories.subcategory = subcategories.id 
WHERE products.sale_price = CASE WHEN products.sale_price > 0 
THEN products.sale_price <=  value ELSE products.price <=  value END
AND products.gender IN(5, 6, 7) 
AND products.type = 5 
GROUP BY(products.id)
ORDER BY products.id ASC;
选择
产品。*,
colors.name作为colorName,
make.name作为makeName,
genders.name作为genderName,
将组_CONCAT(不同类别。名称按类别排序。名称)作为distCategories,
将组_CONCAT(不同的子类别。名称按子类别排序。名称)作为distSubcategories,
组_CONCAT(按makes.name的不同makes.name顺序)作为distmake,
按产品分组(不同产品的可用性。按产品的订单大小。\u可用性。大小)作为DistSize
来自产品
产品上的左连接颜色。颜色=颜色。id
products.make=makes.id上的左连接makes
左键连接products.gender=genders.id上的genders
左键连接products_和_categories.product=products.id上的products_和_类别
左键连接产品和子类别上的产品和子类别。产品=产品。id
左连接产品\u产品上的可用性\u可用性.product=products.id
左连接产品上的类别和类别。类别=类别。id
左连接产品和子类别上的子类别。子类别=子类别。id
其中products.sale\u price=products.sale\u price>0时的情况

那么products.sale\u price谢谢您的回复,不幸的是,我在ELSE products.price附近发现了语法错误。这里的一些逻辑看起来是错误的。在WHERE子句中,您试图将一些值分配给两个不同的变量。我们不能将CASE放在SELECT本身中,并保持WHERE子句不受它影响吗?我不需要使用
CASE
,它只是我在搜索这个特定问题时发现的一种方法。最后我想我明白了,现在关于价格的
WHERE
是这样的
WHERE((products.sale\u price 0)或products.price耶..这看起来是一个更简单的解决方案:)
SELECT 
products.*, 
colors.name AS colorName, 
makes.name AS makeName,  
genders.name AS genderName,
GROUP_CONCAT(DISTINCT categories.name ORDER BY categories.name) AS distCategories, 
GROUP_CONCAT(DISTINCT subcategories.name ORDER BY subcategories.name) AS distSubcategories, 
GROUP_CONCAT(DISTINCT makes.name ORDER BY makes.name) AS distMakes, 
GROUP_CONCAT(DISTINCT products_availability.size ORDER BY products_availability.size) AS distSizes 
FROM products 
LEFT JOIN colors ON products.color = colors.id 
LEFT JOIN makes ON products.make = makes.id 
LEFT JOIN genders ON products.gender = genders.id 
LEFT JOIN products_and_categories ON products_and_categories.product = products.id 
LEFT JOIN products_and_subcategories ON products_and_subcategories.product = products.id 
LEFT JOIN products_availability ON products_availability.product = products.id 
LEFT JOIN categories ON products_and_categories.category = categories.id 
LEFT JOIN subcategories ON products_and_subcategories.subcategory = subcategories.id 
WHERE products.sale_price = CASE WHEN products.sale_price > 0 
THEN products.sale_price <=  value ELSE products.price <=  value END
AND products.gender IN(5, 6, 7) 
AND products.type = 5 
GROUP BY(products.id)
ORDER BY products.id ASC;