Счетчик строк MySQL в операторе обновления - PullRequest
3 голосов
/ 06 сентября 2011

Следующий оператор MySQL работает нормально, и он возвращает мне число строк в виде строки каждого результата.Но теперь я хочу установить для столбца pos значение «row» с помощью оператора update, поскольку я не хочу зацикливать тысячи записей с помощью одного запроса.

Anyидеи?

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 Ответ

1 голос
/ 10 сентября 2011

Существует риск использования пользовательских переменных

В операторе SELECT каждое выражение выбора оценивается только при отправке клиенту.Это означает, что в предложении HAVING, GROUP BY, или ORDER BY ссылка на переменную, которой присвоено значение в списке выражений выбора, не работает должным образом:

Более безопасный метод защиты будет

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...