Mysql更新跳过或忽略不需要的字段


Mysql update which skips or ignore the fields that are not required

我有一个带有给定字段的示例数据库。

我试图实现的是对sql进行更新查询,跳过我不感兴趣更新的字段。

UPDATE `nmc_cd` SET `CDID`=[value-1],`CDTitle`=[value-2],`CDYear`=[value-3],`pubID`=[value-4],`catID`=[value-5],`CDPrice`=[value-6] WHERE 1

这是提供给我的语法。

我设法用这个查询更新了一列

UPDATE `nmc_cd` SET `CDTitle`= 'Black President01' WHERE `CDID` = 978

但是,当我试图使用语法只更新一个字段而忽略其余字段时,一切都会失控

UPDATE `nmc_cd` SET `CDTitle`='Black President01',`pubID`="",`catID`="",`CDPrice`="" WHERE `CDID` = 653

这将更新标题,并将"中的其他字段替换为数据库中的空字段或空白字段。

下一个最好的方法是使用空

UPDATE `nmc_cd` SET `CDTitle`='Black President03',`pubID`="NULL",`catID`="NULL",`CDPrice`="" WHERE `CDID` = 653

它向我返回了更新后的Black President03,但字段的其余部分被替换为NULL;(

如果字段已经被填充,是否有这样的方法可以更新并忽略它?

我知道显而易见的答案是省略我不需要更新的字段,但我有一个html表单,它可以动态填充结果。见附图。

html表单

我想做一个sql查询,只更新已经更改的字段,其余的保持原样。

我可以在php上做一个if-else,但这会很乏味。

有没有其他更简单的方法来解决这个问题?

提前感谢你的忠告。

干杯!

您可以用较少的工作量和一些if来创建自定义查询。

query = "UPDATE `nmc_cd` SET";
if (title filled) query += " `CDTitle`= 'title_value',";
if (pub filled) query += " `pubID`= 'pub value',";
if (cat filled) query += " `catID`= 'cat value',";
if (price filled) query += " `CDPrice`= 'price value',";
//Substring to trim the comma. You should check at least 1 field is filled
query = substr(query, 0, strlen(query) -1) + " WHERE `CDID` = '653';"

您要查找的方法是"IF NOT NULL"。但在您的情况下,只需保留不会更新的属性;)

最快、最简单的方法是将表单值重新提交到数据库中。

如果这不吸引人,你可以根据输入的数据使用switch case来构建查询。假设你必须存储以前的数据来比较已经更改的数据,或者使用JS来识别和onchange。。。

另一个sql解决方案是(psudecode),但您应该能够用这个来解决它

UPDATE nmc_cd
    IF(CDYear='value')    
    (
        SET CDYear= 1   
    )
    ELSE
    (
         ...
    )
    ENDIF
WHERE CDIDIS = 653

更多信息https://bytes.com/topic/mysql/answers/898785-mysql-how-use-update-if-else-condition