MySQL使用One Update Statement更新多个记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL使用One Update Statement更新多个记录相关的知识,希望对你有一定的参考价值。
我有一个动态生成的UPDATE语句,如下所示:
UPDATE `maildespatch` SET `RL_TktNumber`= Null ,`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = 1 ,
UPDATE `maildespatch` SET `RL_TktNumber`= Null ,`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = 2 ,
UPDATE `maildespatch` SET `RL_TktNumber`= Null ,`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = 5 ,
UPDATE `maildespatch` SET `RL_TktNumber`= Null,`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = '68'
数据来自html表字段上的用户输入,基于此字段通过ajax()调用动态生成这些语句。有没有办法保存所有这些数据以更一般地保存/更新mysql?我不想创建临时MySQL表来保存数据,然后更新主表。
答案
更通用的方法是在mysql中调用存储过程(a.k.a用户定义函数 - UDF)并传递必要的参数。
存储过程是数据库中可重用的代码段(类似于后端代码中的函数),可以封装一段逻辑。查看存储过程here的MYSQL文档。
使用它们,您可以像您想要的那样通用 - 例如,对于最常传递的值(例如SxRemote_IP = '::1' ,SxRemotename = 'Raks'
)具有默认值,因此您不必通过网络发送它们并在前端代码中省略它们。
另一答案
您可以像下面一样运行这4个查询:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE `maildespatch` SET `RL_TktNumber`= '11',`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = '1';
UPDATE `maildespatch` SET `RL_TktNumber`= 'Null',`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = '2';
UPDATE `maildespatch` SET `RL_TktNumber`= '33',`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = '5';
UPDATE `maildespatch` SET `RL_TktNumber`= 'Null',`SxRemote_IP`= '::1' ,`SxRemotename`= 'Raks' WHERE `Table_ID` = '68'";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
?>
或者如果要将数据作为数组传递,则可以执行循环:
foreach ($alldata as $data)
{
//your queries will go here
}
另一答案
你可以使用CASE
表达式:
UPDATE maildespatch
SET RL_TktNumber = CASE WHEN Table_ID = '1' THEN '11'
WHEN Table_ID = '2' THEN NULL
WHEN Table_ID = '5' THEN '33'
WHEN Table_ID = '68' THEN NULL END,
SxRemote_IP = '::1',
SxRemotename = 'Raks'
WHERE
Table_ID = IN('1', '2', '5', '68');
请注意,如果Table_ID
是一个整数列,那么你应该正确地比较整数,例如: WHERE
子句应如下所示:
WHERE Table_ID = IN(1, 2, 5, 68)
以上是关于MySQL使用One Update Statement更新多个记录的主要内容,如果未能解决你的问题,请参考以下文章
Update_one 或 insert_many 更新 mongodb 中的记录?