maf*_*tis 2 mysql sql sql-update
我有这个查询
UPDATE users SET username = Param1,email = Param2,PASSWORD = Param3 WHERE id = Param4;
Run Code Online (Sandbox Code Playgroud)
这是更新我的用户行,但我想说:如果电子邮件或密码不为空,请更新它们,否则就让它们保持原样。
那么我的查询应该是什么样的?
通过下面的朋友代码,我现在意识到我的表单发送了空字符串'',而不是null所以我认为我需要检查我的密码是否不是'',以及我的电子邮件是否不是,''而不是它是否不为空。
我认为有些人误解了我的问题,
如果我通过表单发送新值,我希望我的列值email和更改,password
例如,如果我没有在表单中填写我的电子邮件输入,则数据库中的电子邮件不需要更改(更新)。
因此,只需更新每一列,以防它们的值不是空字符串。
像这样
UPDATE users
SET
username = Param1,
email = COALESCE(Param2, email),
password = COALESCE(Param3, password)
WHERE id = Param4;
Run Code Online (Sandbox Code Playgroud)
COALESCE 从左到右工作,采用第一个非空参数。如果您提供 null 作为 Param2,它会将电子邮件更新为电子邮件(无更改)。如果您向 Param2 提供一个值,coalesce 将返回该非空值,因此电子邮件将更新为 param2 的值
Ps:理解您的请求是“我将在参数中提供空值或值。如果我提供空值,我不想更新数据库表。如果我提供值,我确实想更新数据库表”
对我来说,这似乎比你的问题的读法更合乎逻辑,即“如果我的表值对于电子邮件为空,那么我永远希望它保持为空,并且永远不希望我在参数中提供的任何值写入表中”