我想用一个简单的MySQL查询来更新我的表与职位。 我们假设我有一个带有ID,writer_id和位置字段的书桌。由变量循环的Mysql增量
我想能够从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 @[email protected],
@position:=1, -- New writer_id => set position to 1
@position:[email protected]+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循环,并将它们保存一个接一个,但我想这不会有什么更好的
如果您通过writer_id订购,为什么需要该位置?如果您已经获得了writer_id(可能是auto_increment),那么您只需添加另一个递增整数。 –
writer_id在此处不是自动增量值。 @RomanKonz这实际上是一种更好的方法,我没有想到这一点。谢谢你 – NLZ
@RomanKonz,或许你想把这个“触发”的建议变成一个答案。 – MvG