2010-12-22 652 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'的價值。