第一次海报,长期读者。我一直在教自己的代码,过去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这么新!非常感谢。
答案 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
语句(SELECT
和FROM
之间)的字段中,以更改返回的数据。一个简单的例子可能是:
SELECT userid, CASE WHEN disabled = 1 THEN 'Disabled' ELSE '' END AS disabled FROM users;
我想到CASE
如何工作的方式是它在每一行输出上运行。