Update语句中的MySQL Row计数器

时间:2011-09-06 11:08:50

标签: mysql sql select

以下MySQL语句工作正常,它返回每个结果的行数为rownumber。但是现在,我想要做的是使用更新语句将列pos设置为“row”,因为我不希望使用单个查询循环数千条记录。

有什么想法吗?

SELECT @row := @row + 1 AS row, u.ID,u.pos
FROM user u, (SELECT @row := 0) r
WHERE u.year<=2010
ORDER BY u.pos ASC LIMIT 0,10000

1 个答案:

答案 0 :(得分:1)

There is a risk using user defined variables

  

在SELECT语句中,仅在发送到客户端时评估每个select表达式。这意味着在HAVING,GROUP BY,或ORDER BY子句中,引用在select表达式列表中赋值的变量不能按预期工作:

更安全的防护方法

create table tmp_table
(
  pos int(10) unsigned not null auto_increment,
  user_id int(10) not null default 0,
  primary key (pos)
);

insert into tmp_table 
select null, u.ID
from user
where u.year<=2010
order by YOUR_ORDERING_DECISION
limit 0, 10000;

alter table tmp_table add index (user_id);

update user, tmp_table
set user.pos=tmp_table.pos
where user.id=tmp_table.user_id;

drop table tmp_table;