SQL多表更新问题

时间:2019-08-12 09:52:08

标签: php mysql sql

我正在尝试同时更新两个表。该操作已成功完成。但是,它将更新表中的所有记录,而不是指定的记录。我尝试了建议here,但无济于事。任何想法可能是什么问题?我的代码如下所示。

$sql = "UPDATE $receiverTable, $currUserTable 
SET $currUserTable.originator = '$curr_username', 
$receiverTable.originator = '$curr_username', 
$currUserTable.status = '$currValue', 
$receiverTable.status = '$currValue' 
WHERE ($receiverTable.username = '$curr_username') 
OR ($currUserTable.username = '$curr_username')";

2 个答案:

答案 0 :(得分:2)

您对JOIN没有任何条件(您真的不应该再用逗号编写JOIN了),因此每一行都被JOIN到其他每一行,这意味着它们都对一行具有JOIN WHERE条件之一为真,因此它们都将被更新。用适当的条件重写JOIN,问题将消失。像这样:

UPDATE $receiverTable
JOIN $currUserTable ON $currUserTable.somecolumn = $receiverTable.somecolumn
SET $currUserTable.originator = '$curr_username', 
$receiverTable.originator = '$curr_username', 
$currUserTable.status = '$currValue', 
$receiverTable.status = '$currValue' 
WHERE ($receiverTable.username = '$curr_username') 
OR ($currUserTable.username = '$curr_username')

如果无法联接表,则需要将UPDATE编写为两个单独的查询。

答案 1 :(得分:2)

与其使用单个更新执行此操作,不如使用事务来包装两个更新命令,例如this

BEGIN TRANSACTIONS;

UPDATE TABLE1
SET Col1 = 'SomeValue'
WHERE Cond1 = 'SomeCond';

UPDATE TABLE2
SET Col2 = 'SomeValue'
WHERE Cond2 = 'SomeCond';

COMMIT;

更新

this之后,我相信使用phpi会看起来像这样:

mysqli_autocommit($dbConnection, false);

$query1 = " UPDATE $receiverTable set originator = '$curr_username', 
status = '$currValue' WHERE username = '$curr_username' "
$query2 = " UPDATE $currUserTable set originator = '$curr_username', 
status = '$currValue' WHERE username = '$curr_username' "

mysqli_query($dbConnection, $query1); 
mysqli_query($dbConnection, $query2);

mysqli_commit($dbConnection);