我一直在努力寻找解决方案,并找到了几个类似的帖子,但没有一个回答我的问题。
我有一个设计糟糕的表,用于存储排序索引。我们以编程方式更新该索引,因为人们对某些数据进行排序问题是现在索引看起来像1, 2, 2, 3, 6, 6, 7, 8, 8, etc
,所以我负责修复这个问题。我修复了代码,所以这不再发生,但我如何更新数据库?我有一张桌子:
+---------+-------+---------+
| otherId | index | product |
| 3423 | 1 | zbhdfji |
| 63453 | 3 | fgdfgr |
| 75454 | 3 | drhfef |
+---------+-------+---------+
我需要它像:
+---------+-------+---------+
| otherId | index | product |
| 3423 | 1 | zbhdfji |
| 63453 | 2 | fgdfgr |
| 75454 | 3 | drhfef |
+---------+-------+---------+
我尝试过类似的事情:
update table set index = @rownum where otherId in (select other_id FROM table where index <= 200 order by index asc );
但它不喜欢我从同一张桌子拉出来,我甚至不确定它是否会起作用。有什么想法吗?
答案 0 :(得分:1)
如何使用不同的方法 - 而不是更新它,创建一个自动递增的新字段,然后更改表并删除当前索引字段并将新列更改为不自动递增并将其重命名为指数?该新字段的另一个选项是运行简单更新(更新表集索引= newfield),然后删除新字段。
答案 1 :(得分:1)
SET @row_num := 0;
UPDATE `table` SET index = @row_num := @row_num + 1 ORDER BY otherId;