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

时间:2015-11-25 15:54:40

标签: php html mysql forms sql-update

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

我想要实现的是在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

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

下一个最好的事情是使用NULL

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

并且它返回了我更新的Black President03,但其余的字段被替换为NULL;(

如果字段已被填充,是否有更新和忽略字段的方法?

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

html form

我正在考虑做一个sql查询,只是更新已更改的字段,并保留原样。

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

还有另一种更简单的方法来解决这个问题吗?

提前感谢你的善意。

干杯!

3 个答案:

答案 0 :(得分:1)

您可以轻松地制作自定义查询,也可以使用一些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';"

答案 1 :(得分:0)

您正在寻找的方法是“IF NOT NULL”。 但在你的情况下,只需保留你不会更新的属性;)

答案 2 :(得分:0)

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

如果这没有吸引力,你可以根据进来的数据使用switch case构建查询。假设您必须存储以前的数据来比较已更改的数据或使用JS来识别和更改......

另一个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