我有表T_USER,有字段 id , name , sort_order 
其中id是主键   ,   sort_order是用来排序的现在有两个功能
 1, 添加USER时,可以直接将USER插到固定位置,比如,第一位, 第二位等等,在页面输出
 2,在显示列表页面,可以操作将制定USER插入到某一行。要求
 1,或者使用SQL语句实现
       或者使用java代码实现
 2,在满足第一条要求的基础上:
                 推荐不使用更新所有sort_order字段
         
 我的思路不通,请指出错误点:(mybatis)
       1,查询sort_order中的最大值,然后+1,反转排序,可置顶
       2,如果有sort_order字段值分别为  2  ,  3 ,我想将其插入到第3位,此sort_order怎么实现??求教。。先感谢了!
                    

解决方案 »

  1.   

    你这个问题还真的有点难办,需要指定显示顺序,唯一能想到的就是通过自动sort_order来排序了,但是如果数据多了更新所有的也麻烦,现在想到一个办法不知道符合你要求不:
    其实也是更新sort_order,只不过不是全部更新。
    比如已经存在2,3了,现在新增加一条数据显示在第3位,此时是否可以将已经存在的3更新位最大值。那么问题来了,原来的3此时就会排在最后一位了,关键是这点符合你要求么。
    如果符合的话,可以将sort_order添加唯一索引,这样更新能够更快。
      

  2.   

    想到通过目录的方式来存储排序字段sort_order,如下:
    比如已经存在1,2,3,4,5条记录。
    现在新增一条要求显示在第3位,此时sort_order的值为2.1
    现在又新增一条要求显示在第4位,此时sor_order的值设置为2.2
    现在又新增一条要求显示在第4位,此时sort_order值设置为2.1.1
    现在一共有8条记录了,直接order by sort_order,顺序如下:


    2.1
     2.1.1
     2.2
     3
     4
     5
    这种方法唯一的弊端在于计算新插入记录的sort_order的值,不过这个都可以用程序计算出来。
    仅供参考,如果有更好的方法可以分享一下
      

  3.   

    2.1.1 这就只能是字符了
    SQL语句能order by这个吗?
      

  4.   

    还是有问题,问题不在于你说的,问题在于比如
    当已经存在了2和2.1,
    要在这两个数字中间插入记录该怎么办?算了,你这个需求太奇怪了,现在只能想到通过update已经存在的记录来实现。
      

  5.   

    是我表达错误了
    只是要求用sort_order字段来实现置顶和指定插入某行的功能就行了,并能在页面显示就行了
    具体用什么,怎么用无所谓了
    只是求个行的通的方法。。