我有一个包含给定字段的示例数据库。
我想要实现的是在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表单。 见附图。
我正在考虑做一个sql查询,只是更新已更改的字段,并保留原样。
我可以在php上做一个if else,但这会很乏味。
还有另一种更简单的方法来解决这个问题吗?
提前感谢你的善意。
干杯!
答案 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