假设我有这段代码
$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()函数将执行查询并相应地获取结果)
答案 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;
只要您不重新连接到数据库,就可以在单独的查询中执行SET
和UPDATE
。
答案 2 :(得分:0)
SET @ordering = 100000;
更新候选人SET regno =(@ordering:= @ordering + 1)
其中year = 2014,确认= 1,e_stat = 1,按centre_code,name
排序;