日期:2014-05-18  浏览次数:20768 次

关于数据插入或删除后,更新排列序号的问题
简单点说,比如我有一个库表,字段就是人名,在查询时要根据用户自已的需求来排序,所以再加了一个字段记录序号,比如:
张三 1
李四 2
王老五 3
赵大 4
。。。。。

现在,在应用程序界面新增了一个人名进去,比如在李四前面加了一个人:甲六,那新的排序应该是:
张三 1
甲六 2
李四 3
王老五 4
赵大 5
。。。。。

我想大家应该明白我的意思了吧。现在的问题是,在应用程序中如何用最好的方法来实现这个看似简单的功能,是不是只能一条一条记录更新过去?那当数据量很大时岂不是一点点改动就要更新一大批数据?有没有做过类似功能的人给个建议?

------解决方案--------------------
假如加的是 甲六 2,那么先用sql去update,因为你知道当前的sortid,所以将大于等于它的都加一

update xxxxx set sortid=sortid+1 where sortid=2

然后插入 甲六,他的sortid为当前sortid=2,因为之前的2已经加一变成3了
------解决方案--------------------
这个问题 我建议不要如此处理 之前也遇到过这样的问题

这儿给出我个人的处理方法
程序的实体类确实有orderNo字段,在数据库表中我并没有存储排序的order_no字段而是用视图查询结果来替代
SELECT * FROM info_job_index_catalog

1 a ABAP程序师招聘 320181
2 a ABAP程序员招聘 320181
3 a ABAP程序招聘 320181
4 b BCF工程师招聘 320181
5 b 备份人员 320181


CREATE VIEW JobIndexCatalog AS(
SELECT *,ROW_NUMBER() OVER(PARTITION BY index_letter ORDER BY job_name) order_no
FROM info_job_index_catalog 
)

SELECT * FROM JobIndexCatalog

1 a ABAP程序师招聘 320181 1
2 a ABAP程序员招聘 320181 2
3 a ABAP程序招聘 320181 3
4 b BCF工程师招聘 320181 1
5 b 备份人员 320181 2