Php MySQL语句在更新集时总是将值设置为0

Php MySQL语句在更新集时总是将值设置为0,php,mysql,sql,Php,Mysql,Sql,我的MySQL语句用了4天的时间来寻找一个有效的语句,它应该取1个给定值,并检查3个不同的列是否已填充或为空。如果该列获得一个值,它将转到下一列。如果该列为空,则应将给定值写入该单元格 不幸的是,我的语句能够获取该列,但当我尝试设置该值时,它总是设置为0。当我尝试+1现有值时,它不会出现任何问题 声明: UPDATE `license` SET `hardwareid1` = IF( `hardwareid1` = 123,`hardwareid1` = 987, `hardwareid1`

我的MySQL语句用了4天的时间来寻找一个有效的语句,它应该取1个给定值,并检查3个不同的列是否已填充或为空。如果该列获得一个值,它将转到下一列。如果该列为空,则应将给定值写入该单元格

不幸的是,我的语句能够获取该列,但当我尝试设置该值时,它总是设置为0。当我尝试+1现有值时,它不会出现任何问题

声明:

UPDATE `license` SET
  `hardwareid1` = IF( `hardwareid1` = 123,`hardwareid1` = 987, `hardwareid1`) ,
  `hardwareid2` = IF( `hardwareid2` = 123, `hardwareid2` = 987, `hardwareid2` )
  WHERE `code` = 99
其中=123为,在生产中我将使用为NULL,987代表$value中的示例值

因此,如果hardwareid1真的是123,它不会写987,而是写0

请帮忙

UPDATE  license
SET     hardwareID3 = CASE WHEN hardwareID1 IS NOT NULL AND
                                hardwareID2 IS NOT NULL AND
                                hardwareID3 IS NULL
                                THEN 987 
                                ELSE hardwareID3 END,
        hardwareID2 = CASE WHEN hardwareID1 IS NOT NULL AND 
                                hardwareID2 IS NULL 
                                THEN 987 
                                ELSE hardwareID2 END,
        hardwareID1 = CASE WHEN hardwareID1 IS NULL 
                                THEN 987 
                                ELSE hardwareID1 END
WHERE   code = 99

查询所做的是,当hardwareID1为NULL时,新值987将插入列中。同时,如果hardwareID1有值且hardwareID2为空,则hardwareID2的值也将更改。否则,它们的所有值都将保留。

我真的不知道,但是您的SQL不应该更像这样吗

`hardwareid1`=CASE
WHEN `hardwareid1`= NULL THEN set_to_xy

更新许可证集hardwareID1=IFhardwareID1=123987,hardwareID1,hardwareID2=IFhardwareID1=55987,hardwareID2,其中code=99尝试了此操作,适用于第一个专栏,但不适用于第二个专栏你真是个天才:为什么MySQL文档那么难理解,这里的人总是这么棒:对于第三个专栏,我只需要再添加一个硬件2。。。。对吗?只是一个小小的修正,你的语句填充了NULL的所有列,但它应该只填充第一个NULL的列:如果1得到一个值,2和3是NULL,那么只有2应该得到值是的,我复制粘贴了它,并尝试所有列为NULL,但它用值987填充所有NULL列,而不是在Hello中第一次填充后停止,很抱歉再次问你,但我没有找到进一步扩展的解决方案。您的代码工作正常,但现在我只需要在我想要更新的值不存在时更新列。在每次调用时,语句都会插入该值,但不会查看该值是否已在某个solumn中