MySQL Get" id"从选择

时间:2014-05-23 16:31:54

标签: mysql select

我有一个选择声明:

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;

提前致谢。

2 个答案:

答案 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)

可能这不是你想要做的。

  • 首先......如果查询只返回1行,则Marcus Adams提供的解决方案可以正常工作。但是,如果查询只返回一行,则无需预设id以进行更新。只需更新它:
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";   
?>

当然,我的照片很小。可能你有理由这样做,或者这只是一个例子。如果您向我们提供更多信息,我们可能会更有帮助。