使用单个查询在更新时自动增加mysql列字段

时间:2013-04-03 15:40:25

标签: php mysql sql sql-update

假设我有这段代码

$ids = execute_query("SELECT id FROM table WHERE field = 'value' ORDER BY order_field");
$query = "UPDATE table SET increment = CASE";
for($i = 0; $i <= sizeof($ids); $i++){
  $query .= " WHEN id = " . $ids[$i] . " THEN " . $i;
}
$query .= " END WHERE field = 'value'";

然后我执行该查询...

有没有办法将SELECT和UPDATE组合成一个单独的查询,有效地实现完全相同的事情?

(LOL假设execute_query()函数将执行查询并相应地获取结果)

3 个答案:

答案 0 :(得分:0)

这可能会做你想要的:

update table
    set increment = (select cnt
                     from (select count(*) as cnt
                           from table t
                           where field = 'value' and t.id <= table.id
                          ) a
                    )
    where field = 'value';

答案 1 :(得分:0)

在无法选择同一个表时更新表:http://dev.mysql.com/doc/refman/5.6/en/update.html “目前,您无法更新表并从子查询中的同一个表中进行选择。”

我没有在这里运行,但据我所知,这就是你想要的:

SET @ordering = 0;

UPDATE
  table SET increment = (@ordering := @ordering + 1)
WHERE
  field = 'value'
ORDER BY
  order_field;

只要您不重新连接到数据库,就可以在单独的查询中执行SETUPDATE

答案 2 :(得分:0)

SET @ordering = 100000; 更新候选人SET regno =(@ordering:= @ordering + 1) 其中year = 2014,确认= 1,e_stat = 1,按centre_code,name排序;