作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第一次发帖,长期读者。在过去的 6-8 个月里,我一直在自学代码,我认为我在 PHP/Javascript/MySQL 堆栈方面已经相当不错了。我非常喜欢 Stack 建立的社区,因为它确实有助于与更了解事物的人分享问题。
所以我的问题可能相对简单,但我不确定如何使用 Case When...Then 这里。 (或者这是否正确使用!)。基本上我想在 where 子句中说的是:如果此列 = 1,则也处理此条件。类似于:
SELECT product_name
FROM b2c_products, b2c_sellers
WHERE b2c_products.productId = b2c_sellers.product_Id AND CASE WHEN b2c_products.productType = 1 THEN b2c_sellers.seller_country = '$country' END;
我希望大家能够理解这个想法 - 我知道这是一个简单的问题,我只是对 SQL 很陌生!提前非常感谢。
最佳答案
Case 语句的工作方式与您尝试的方式不同,它们主要用于选择器,请参阅 http://dev.mysql.com/doc/refman/5.0/en/case.html或 staticsan 的答案。您可以在 WHERE 子句中使用它们,但通常应考虑进行数据转换。
MySQL确实有IF语句的概念:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if可以嵌套。例如
1 = IF(b2c_products.productType = 1, IF(b2c_sellers.seller_country = '$country', 1, 0), 0)
作为替代方案,您可以通过嵌套简单的 AND 子句来实现您想要的效果,这也将允许您使用索引,例如
SELECT product_name
FROM b2c_products, b2c_sellers
WHERE ((b2c_products.productType = 1 AND b2c_sellers.seller_country = '$country')
OR b2c_products.productType <> 1);
顺便说一句,请确保转义“$country”以避免 SQL 注入(inject)。
关于MySQL 选择 : Case When Or Something Else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511231/
我是一名优秀的程序员,十分优秀!