MySQL选择:案例什么时候还是其他什么?

时间:2013-12-11 05:29:26

标签: mysql

第一次海报,长期读者。我一直在教自己的代码,过去6-8个月,我觉得我在PHP / Javascript / MySQL堆栈上相当不错。我非常喜欢Stack所建立的社区,因为它真的有助于与那些了解情况的人分享问题。

所以我的问题可能相对简单,但我不知道如何使用Case When ...然后在这里。 (或者使用它是否正确!)。基本上我想在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这么新!非常感谢。

2 个答案:

答案 0 :(得分:1)

案例陈述的工作方式与您尝试的方式无关,主要针对选择者,请参阅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注入。

答案 1 :(得分:0)

实际上,不,你要做的事情远非显而易见。

CASE通常用于SELECT语句(SELECTFROM之间)的字段中,以更改返回的数据。一个简单的例子可能是:

SELECT userid, CASE WHEN disabled = 1 THEN 'Disabled' ELSE '' END AS disabled FROM users;

我想到CASE如何工作的方式是它在每一行输出上运行。