我有一个任务分配系统,我想将人员分配给某些任务。该表的布局如下:+---------+---------+-------------+-------------+-------------+|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设置为。反向检查可以完全避免这种情况。
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
所以我找到了解决方案...
我已经通过一条select语句提取了所有表数据。然后每行只做了很多php if语句。
如果一个单元格为空,请更新该单元格,否则请检查下一列中的单元格是否为空。
- 3 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消