【问题标题】:MySQL: if field is empty assign a valueMySQL:如果字段为空,则赋值
【发布时间】:2023-04-10 13:05:01
【问题描述】:

这是我的查询:

$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”,我需要频道为“web”,这样频道就不会为空或空或什么都没有。我怎样才能做到这一点?我究竟做错了什么?

非常感谢

【问题讨论】:

  • 如果您找到了有效的答案,请将其标记为已接受,这样它就不会被列为未回答,并且其他人可能会发现它更容易:)

标签: php mysql if-statement conditional


【解决方案1】:
select 
...
case when channel = '' then 
   web 
else 
   channel 
end as TYPE....

使用CASE 语句。

即适合你的情况

$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') ";

编辑:添加了coalesce 以处理可能的NULL 值。

【讨论】:

  • 这仍然会让null 通过网络。 case when channel = 'wep' then 'wep' else 'web' end 听起来更像你在追求什么?这比if() 有什么优势?
  • 非常感谢大家,你们太棒了!!这是我最终使用的案例结构,只是因为它对我来说更容易获得,但真的感谢所有人,你让我免于更多时间的挫败感。
【解决方案2】:

这不能工作的任何原因?

$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'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多