我正在尝试使用一个简单的 MySQL 查询来更新我的表的位置。假设我有一个带有 ID、writer_id 和 position 字段的 book 表。
我希望能够从 1 ... x 获得职位,但每个 writer_id。如果我删除一条记录,我的位置就会有间隙,所以这就是为什么我想要一个简单的查询来重置所有位置而没有间隙。
目前我有以下代码(有效),但我认为这应该更容易(并且可能更快)。
set @position := 0;
set @lastDependency := 0;
set @previousDependency := -1;
UPDATE `book` SET
`writer_id`=(@lastDependency:=`writer_id`), -- Set writer_id of current row
position=(
IF (
NOT @lastDependency=@previousDependency,
@position:=1, -- New writer_id => set position to 1
@position:=@position+1 -- Same writer id, increment position
)
),
`writer_id`=(@previousDependency:=`writer_id`) -- Set writer_id of last used row
ORDER BY `writer_id`, position ASC -- Order by current positions
我也可以使用 PHP 循环遍历我的所有记录并一一保存,但我想这不会更好