一个排名管理的mysql数据库设计
有一个排名:
1 信息一 上移 下降 删除
2 信息二 上移 下降 删除
3 信息三 上移 下降 删除
4 信息四 上移 下降 删除
有分页,然后还要支持一个或者多个集体上移到顶部位置,表怎么设计呢?自增排序字段好像不是很好。
在表的上加一个字段 代表当前序列 -1带表删除 用数字代表所在位置
上移,下移这个好实现,关键是 一个或者多个上移到最前面,后面的排序字段都要改变,比如移动2条记录到前面,前面记录排序字段都要减2,还要考虑删除字段,记录缺失(或者像1#说的做逻辑删除吗?)。记录数太多的话,性能不好,这个好像是个算法问题了。
不用后面的字段都要变啊 比如序列是1 2 3 4 如果3上移 就只需要修改2和3两条记录 1和4不用变的
这是上移 下移的功能,这个没问题。关键是一个或者多个上移到最前面问题的解决。比如:1,2,3,4,5排序,我4,5移到上面,1,2,3就要每个加2,重新变成1,2,3,4,5排序。如果记录数多的话,改动是不是太大了?有没有更好的解决方案或者算法呢?
在UI中排好序,然后更新到数据库中。
只有建立1个辅助表,保存顺序,ID唯一
id num
替换NUM,再与工作表通过ID连接
比如在表中
id,title,seq
1 信息一 1
2 信息二 2
3 信息三 3
4 信息四 4
以seq 来排序。 UI加载的时候,直接从表中取记录 order by seq.
UI上进行调整,排序(这个在UI中用代码实现,与数据库无关)
在UI中应该得到一个调整后的集合
2 信息二 1
1 信息一 2
4 信息四 3
3 信息三 4
此时,在保存事件中将 seq值 update 到数据库。