我有一个带有这样列的表:
id(int auto inc Primary),标题(varchar),批处理(int)
其特点是每批有3个项目。但在这种情况下,批处理不按顺序排列
这里是示例数据:
- 1,a,5
- 2,b,5
- 3,c,5
- 4,d,7
- 5,e,7
- 6,f,7
- 7,克,10
- 8,小时,10
是否有任何查询来更新这些批处理变得像自动增量一样? (按批处理排序)因此第 5 批变为 1,第 7 批变为 2,第 10 批变为 3,依此类推。
TL;DR:我想更新每批序列,而不是每行
感谢您的帮助。
最佳答案
你可以这样做:
UPDATE t
JOIN (
SELECT
t.*,
@newbatch := IF (@rc % 3 = 0, @newbatch + 1, @newbatch) AS newbatch,
@rc := @rc + 1
FROM t
, (SELECT @rc := 0, @newbatch := 0) var_init_subquery
) sq ON t.id = sq.id
SET t.batch = newbatch;
- 看到它在 sqlfiddle 中实时运行
如果您对其工作原理有疑问,请阅读本文 manual entry about user defined variables首先。
关于MySQL 每批更改数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344462/