我正在尝试同时更新两个表。该操作已成功完成。但是,它将更新表中的所有记录,而不是指定的记录。我尝试了建议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')";
答案 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);