我正在尝试使用一个简单的 MySQL 查询来更新我的表中的位置。 假设我有一个 book 表,其中包含一个 ID、一个 writer_id 和一个 position 字段。
我希望能够拥有从 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 循环遍历我所有的记录并一条一条保存,但我想那也好不到哪去
最佳答案
为什么不使用具有以下功能的触发器:
“删除一行时,将大于删除行的evere writer_id减1”
或者用伪代码来说:
create trigger for delete...
update book
set writer_id = writer_id - 1
where writer_id > deleted.writer_id
关于Mysql在循环中按变量递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12679462/