我有一个带有整数字段的表,用于控制记录的自定义显示顺序。
示例:
SET @rownumber = 0;
SELECT
@rownumber:=@rownumber+1 AS rownumber,
slides.displayorder
WHERE
active = 1
ORDER BY displayorder ASC
这个查询给我的结果有点像这样:
rownumber | displayorder
-----------+-------------
1 2
2 7
3 15
4 50
5 80
这可以正常工作,直到记录被删除/未批准(因此显示顺序中的间隙)。
我想要做的是运行一个更新查询,在删除记录后将displayorder
列设置为rownumber变量的值。
给出这样的结果:
rownumber | displayorder
-----------+-------------
1 1
2 2
3 3
4 4
5 5
有一种简单的方法吗?
答案 0 :(得分:1)
这似乎可以胜任。
SET @rownumber = 0;
INSERT INTO slides (id, displayorder)
SELECT a.id, a.rownumber
FROM (SELECT id, (@rownumber:=@rownumber+1) AS rownumber FROM slides WHERE active = 1 ORDER BY displayorder ASC) AS a ON DUPLICATE KEY UPDATE displayorder = a.rownumber