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;