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

我有一个任务分配系统,我想将人员分配给某些任务。该表的布局如下:


+---------+---------+-------------+-------------+-------------+

|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')''附近使用正确的语法


但是据我所知这是一个普遍的错误。


慕的地10843
浏览 126回答 3
3回答

呼唤远方

这应该可以满足您的需求: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设置为。反向检查可以完全避免这种情况。

qq_遁去的一_1

所以我找到了解决方案...我已经通过一条select语句提取了所有表数据。然后每行只做了很多php if语句。如果一个单元格为空,请更新该单元格,否则请检查下一列中的单元格是否为空。
打开App,查看更多内容
随时随地看视频慕课网APP