简单点说,比如我有一个库表,字段就是人名,在查询时要根据用户自已的需求来排序,所以再加了一个字段记录序号,比如:
张三    1
李四    2
王老五  3
赵大    4
。。现在,在应用程序界面新增了一个人名进去,比如在李四前面加了一个人:甲六,那新的排序应该是:
张三    1
甲六    2
李四    3
王老五  4
赵大    5
。。我想大家应该明白我的意思了吧。现在的问题是,在应用程序中如何用最好的方法来实现这个看似简单的功能,是不是只能一条一条记录更新过去?那当数据量很大时岂不是一点点改动就要更新一大批数据?有没有做过类似功能的人给个建议?

解决方案 »

  1.   

    假如加的是 甲六 2,那么先用sql去update,因为你知道当前的sortid,所以将大于等于它的都加一update xxxxx set sortid=sortid+1 where sortid=2   然后插入 甲六,他的sortid为当前sortid=2,因为之前的2已经加一变成3了
      

  2.   

    这个问题 我建议不要如此处理 之前也遇到过这样的问题这儿给出我个人的处理方法
    程序的实体类确实有orderNo字段,在数据库表中我并没有存储排序的order_no字段而是用视图查询结果来替代
    SELECT * FROM info_job_index_catalog1 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 JobIndexCatalog1 a ABAP程序师招聘 320181  1
    2 a ABAP程序员招聘 320181  2
    3 a ABAP程序招聘         320181  3
    4      b BCF工程师招聘         320181  1
    5      b 备份人员                 320181  2
      

  3.   

    如此的时候就不需要在 删除 修改 新增的时候对order_no进行操作 
      

  4.   

    SELECT *,ROW_NUMBER() OVER(PARTITION BY index_letter ORDER BY job_name) order_no
    FROM info_job_index_catalog  开窗函数 不清楚的话 自己google