2010-12-22 132 views
4

这里是我的查询:MySQL的:如果字段为空赋值

$sql = "SELECT u.PHONE , u.STATE , if (uo.CHANNEL='','web',channel) as TYPE FROM user 
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') "; 

它是伟大的工作,我得到了我想要的,但对于信道是空的。

我需要渠道是“网络”,如果不是“WAP”,这样的通道不为空或空或没有。我怎样才能做到这一点?我究竟做错了什么?

由于使用CASE语句很多

+1

如果您甲肝发现有效的答案,将其标记为接受,因此没有被列为悬而未决,也让其他人可能会更容易:) – 2010-12-22 15:46:12

回答

5
select 
... 
case when channel = '' then 
    web 
else 
    channel 
end as TYPE.... 

即对于你的情况

$sql = "SELECT u.PHONE , u.STATE 
, case when coalesce(uo.CHANNEL, '') = '' then 'web' else channel end as TYPE 
FROM user 
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') "; 

编辑:添加​​3210应对可能NULL值。

+0

这个会还让通过网络一个`null`。 `情况下,当信道=“WEP”,然后“WEP”其他“网络” end`听起来更像是你以后?这对'if()`有什么好处? – 2010-12-22 11:43:41

3

任何理由为什么不能工作?

$sql = "SELECT u.PHONE , u.STATE , if (uo.CHANNEL='wap','wap','web') as TYPE FROM user 
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') "; 

MySQL不喜欢比较一个nullstring,所以你既可以窝在另一个if声明测试uo.CHANNEL IS NULL,或者说,改变你的表,所以它不能为空,并给它一个默认'wap'的价值。

相关问题