我有一个带有给定字段的示例数据库。
我试图实现的是对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