我正在尝试使用简单的MySQL查询来更新我的表的位置。
假设我有一个带有ID,writer_id和位置字段的书桌。
我想能够拥有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循环遍历所有记录并逐一保存,但我想这不会更好