说我有这个循环:
foreach ($array as $a) {
if ($a == $b) {
mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
}
}
还有一张桌子......
id this blah
------------------------
1 that 54
2 that 73
3 there 27
在该循环中,我还想从正在更新的当前记录中找到存储在表blah
字段中的值。
最有效的方法是什么?
答案 0 :(得分:1)
您可以让查询包含多个语句,最后一个语句用于“结果”。
因此,您只需在更新查询的末尾添加“select”语句,并将其视为普通的select语句:
UPDATE table SET this = 'that' WHERE id='$a'; SELECT blah from [your table] WHERE id = '$a'
此方法的优点是它不需要额外的数据库调用。
当然,您需要转义放入SQL语句的值以防止SQL注入,但这是另一回事。
答案 1 :(得分:0)
<强>更新强>
这是我认为需要修改的第一个第二个SO答案。在四处寻找,我找到了一个更好的答案。
问题的accepted answer:SQL: Update a row and returning a column value with 1 query
您需要OUTPUT子句
UPDATE Items SET Clicks = Clicks + 1 OUTPUT INSERTED.Name WHERE Id = @Id
类似的问题:Is there a way to SELECT and UPDATE rows at the same time?
旧答案
在SELECT
查询的末尾添加UPDATE
语句。
mysql_query("UPDATE table SET this = 'that' WHERE id='$a'; SELECT blah WHERE id='$a';");
这可以防止您确保更新发生,因为mysql_query
仅返回最后一个语句的结果。
您还可以编写一个自定义函数来执行这两个语句,但是,如果SELECT
失败,则不会预先形成UPDATE
等。
**骨架功能 - 未经测试**
function MyUpdate($query, $id){
$retVal = "-1" // some default value
$uResult = mysql_query("UPDATE table SET this = 'that' WHERE id='$a'");
if( $uResult )
$result= mysql_query('SELECT blah WHERE id=$a');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
$retVal = $result;
}
return $retVal;
}