选择随机行并在同一查询中更新它们?

时间:2011-10-17 16:52:33

标签: mysql

基本上我想在一个查询中执行以下操作。有可能吗?

$q = mysql_query('select * from table ORDER BY rand() LIMIT 5');
$s;
while($r = mysq_fetch_array($q)){
    $s[i] = $r['id'];
    // Do stuff
}
$u = mysql_query("update table SET lastUpdated = NOW() where id in (".implode(',',$s).")");

2 个答案:

答案 0 :(得分:5)

您只需添加

即可
ORDER BY RAND() LIMIT 5

更新查询结束

编辑:

我最初错过了部分问题。如果您只需需要更新5个随机行,则上述操作将起作用。但是,看起来您需要从表中获取5个随机ID,使用这些ID执行某些操作,并更新这些行。不幸的是,UPDATE查询可以修改数据,SELECT查询可以检索数据,但两种查询都不能同时执行。您可以创建某种存储过程来更新/选择5个随机行,但这比您当前拥有的2个查询更复杂

编辑#2:

如果您想在同一查询中执行此操作的原因是并发,则可以查看MySQL的Locking Read功能。

答案 1 :(得分:3)

您不能在同一查询中对同一个表使用select / update语句。