SQL Обновить поле int в таблице инкрементируя начальное значение?

Вот пока получилось так.
update `cases` 
			cross join (select @rownumber := 0) r
			set `ordered` = (@rownumber := @rownumber + 1)

--------------------------
Но проблема в том что нужно чтобы обновляло по списку отсортированному `ordered` ASC
пробовал добавить что то типа
WHERE `cases`.`id` IN (

					SELECT `cases`.`id` FROM `cases` 
					ORDER BY `cases`.`ordered` ASC  
					)

Уважаемые гуру MYSQL, подскажите как сделать правильно?
------
Вот код который делает то что нужно кучей запросов.
public function normalize(){
		$item=0;
		$arr=$this->db->squery('SELECT `ordered`,`id` FROM `cases` order by `ordered` ASC',true);

		if ($arr){
			foreach ($arr as $k=>$v){
				$this->db->query('UPDATE `cases` SET `ordered`='.intval($item).' WHERE `id`='.intval($v['id']).' ');
				$item++;
				}
			}


		}
  • Вопрос задан
  • 664 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Я стесняюсь спросить - а зачем вообще это? Не проще на бекенде делать нумерацию строк если уж так надо?
Или в чем вообще задача?
Ответ написан
He11ion
@He11ion
PHP-monkey
Энжой ё костыль:
UPDATE `cases` SET `ordered` = `ordered` + 1
WHERE id = (SELECT a.`id` FROM (SELECT * FROM `cases` ORDER BY `ordered` ASC LIMIT 1) as a);
Ответ написан
@ollisso
а чем такое не подходит ? :)

set @rownumber := 0;
update `cases` 
      set `ordered` = (@rownumber := @rownumber + 1)
order by ordered ASC
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы