根据行号更新表

时间:2012-04-11 14:14:47

标签: mysql sql

我有一个带有整数字段的表,用于控制记录的自定义显示顺序。

示例:

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

有一种简单的方法吗?

1 个答案:

答案 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