我有一个选择声明:
SELECT id, content, name
FROM records
WHERE type = '1'
AND name = 'test';
这是输出:
id content name
99708 10.6.252.41 server01.example.org
我想要做的是能够获取从前一个语句返回的id
并将id
作为输入用于另一个语句(UPDATE
声明)将增加同一个表中单个列的值。
我想要的一个示例UPDATE
语句是:
update records SET hits = hits + 1 WHERE id = ID_FROM_SELECT;
提前致谢。
答案 0 :(得分:4)
如果SELECT
仅返回一个结果,则可以使用user defined session variables:
SELECT @id:=id AS id, content, name
FROM records
WHERE type = '1'
AND name = 'test';
然后,在同一个数据库会话(连接)上,执行以下操作:
UPDATE records
SET hits = hits + 1
WHERE id = @id;
我假设您正在对应用中的所选记录执行某些操作,并且您试图通过避免在UPDATE
中再次搜索记录来节省性能。但是,在这种情况下,为什么不在代码中将'id'值设置为参数?
显然,如果SELECT
返回多个记录,最好在我上面提到的代码中完成,否则你将再次作为子查询运行SELECT
查询:
UPDATE records
SET hits = hits + 1
WHERE id IN
(SELECT id
FROM records
WHERE type = '1'
AND name = 'test');
那么,只需将相同的过滤器应用于UPDATE
就更有意义了:
UPDATE records
SET hits = hits + 1
WHERE type = '1'
AND name = 'test'
答案 1 :(得分:0)
可能这不是你想要做的。
update records set hits = hits + 1 where type = '1' and name = 'test'
我认为你没有很好地设计你的系统。如果更新请求来自外部,则应将id更新为请求的参数。例如:
<html>
<body>
<a href="update.php?id=15">Test</a>
</body>
</html>
在你的update.php中你有类似的东西:
<?php
$id = $_GET['id'];
$sql = "update records set hits = hits + 1 where type = '1' and name = 'test' and id = $id";
?>
当然,我的照片很小。可能你有理由这样做,或者这只是一个例子。如果您向我们提供更多信息,我们可能会更有帮助。