Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren der Spalte, sodass sie die Zeilenposition enthält

Das sollte funktionieren

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;

Aber ich würde es vorziehen, dies zuerst anzuwenden, um die benutzerdefinierte Variable zu deaktivieren

set @row_number:=0;

Hinzugefügt von Mchl:

Sie können dies in einer Anweisung wie dieser tun

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;