Mysql
 sql >> база данни >  >> RDS >> Mysql

Колоната се актуализира, така че да съдържа позицията на реда

Това трябва да работи

update 
content,
(
  select 
  @row_number:=ifnull(@row_number, 0)+1 as new_position,
  ContentID 
  from content
  where CategoryID=1
  order by position
) as table_position
set position=table_position.new_position
where table_position.ContentID=content.ContentID;

Но бих предпочел първо да приложа това, за да премахна дефинираната от потребител променлива

set @row_number:=0;

Добавено от Mchl:

Можете да направите това с едно изявление като това

update 
content,
(
  select 
  @row_number:=ifnull(@row_number, 0)+1 as new_position,
  ContentID 
  from content
  where CategoryID=1
  order by position
) as table_position,
(
  select @row_number:=0
) as rowNumberInit
set position=table_position.new_position
where table_position.ContentID=content.ContentID;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Бърз старт на миграцията на база данни с помощта на Talend

  2. SQLSTATE[HY093] :израз на pdo по време на вмъкване в mysql db

  3. Невалидна стойност по подразбиране за „Дата“

  4. SPARQL заявка за получаване на всички родители на възел

  5. Кой е най-добрият начин за връщане на enum стойности в MySQL?