为了账号安全,请及时绑定邮箱和手机立即绑定

仅在值为空时如何更新,否则在下一行更新

仅在值为空时如何更新,否则在下一行更新

PHP
慕的地10843 2021-04-29 10:13:59
我有一个任务分配系统,我想将人员分配给某些任务。该表的布局如下:+---------+---------+-------------+-------------+-------------+|Task name| person1 | person2     | person3     | person4     |+---------+---------+-------------+-------------+-------------+如果一个任务已经分配给例如2个人,则我希望更新功能填充3个人。因此,它基本上检查值是否为空,如果是,则输入数据,否则检查下一列中的值是否为空并将其放在那里,并在所有列中继续执行此操作。我已经尝试过了,但这会输出一个错误:UPDATE data SET IF(person1 IS NULL, person1,                   IF(person2 IS NULL,person2,                    IF(person3 IS NULL, person3,                      IF(person4 IS NULL, person4,                        IF(person5 IS NULL, person5, person6)))))                 ='$person_name' WHERE id=$id这将输出以下错误:您的SQL语法有误;检查与您的MariaDB服务器版本相对应的手册以在'IF(person1 IS NULL,person1,IF(person2 IS NULL,person2,IF(person3 IS NULL,back,back')''附近使用正确的语法但是据我所知这是一个普遍的错误。
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

这应该可以满足您的需求:


UPDATE `data`

   SET person4 = IF(person4 IS NULL AND person3 IS NOT NULL, 'value', person4),

       person3 = IF(person3 IS NULL AND person2 IS NOT NULL, 'value', person3),

       person2 = IF(person2 IS NULL AND person1 IS NOT NULL, 'value', person2),

       person1 = IF(person1 IS NULL, 'value', person1)

 WHERE id = $id;

编辑:您想按相反的顺序执行SET的原因是,MySQL将单独执行每个SET,并且这些结果将在IF()条件下用于下一个SET。因此,如果将person2设置为一个值,然后检查person3,将看到person2已被填充,并设置person3,则对person4的检查将看到person3具有值,并且也将person4设置为。反向检查可以完全避免这种情况。


查看完整回答
反对 回复 2021-05-14
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

所以我找到了解决方案...

我已经通过一条select语句提取了所有表数据。然后每行只做了很多php if语句。

如果一个单元格为空,请更新该单元格,否则请检查下一列中的单元格是否为空。


查看完整回答
反对 回复 2021-05-14
  • 3 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信