0 0

请教一个数据库字段排序的问题30

有一堆产品,在数据库里有一个字段标识其在网页浏览时的顺序,现在想让拥有者管理其排序显示顺序,
在列表页面允许通过拖拽产品或输入特定顺序值的方式改变其顺序
想到的方法有两个 一个笨办法将传回的id全部按顺序更新
第二个 将排序字段间隔扩大,这样比如第一个插最后个只需将第一个插到最后个数据的后面,对前面
数据没影响,但困难的是 如何知道传回的id那些是需要改变的
需求要允许多个改变 一次提交

第一个办法的涉及到跨页排序就很惨了
第二个办法卡在如何知道要更新那些顺序上
请教高手
问题补充:
第三个办法刚才看到:
swallor :
假设插入在P处(顺序号是不会重复的吧,orderNo=P),一是新插入记录,这时一次update就可以了:update tabName set orderNo=orderNo+1 where orderNo>P;
insert into ..orderNo=P where id=newID;
第二种情况是移动一条记录N到P处,分为N>P和N<P两种情况,也是update就可以了

但是如果一次提交涉及到多个次序变化这样操作还是会有很多sql语句
请教最精简的方法!
问题补充:
今天做出的初步解决方案
在页面用js保留最初的id ,相应的排序值,提交的时候把这两个初始值和改变了位置的id一起传回,比如
顺序   1 2 3 4
初始   a b c d
排序1  d a b c
排序2  a b d c
只要将一新一旧id数组同位置的相比较若不相同则设相应的位置值 更新 完成排序
这种解决方法只适用于不跨页的排序
如果当前页50个 通过输入的方式要排到第60个 就得用插入算法了
看过阿里的拖拽排序 不知道他们怎么实现的
期待高手指点


问题补充:
想找个最有效率的解决方式就比较烦了
2008年5月29日 19:32

8个答案 按时间排序 按投票排序

0 0

分页也可啊 总有开始索引记录吧 在前台javascript计算好 id---neworderno等字串值 到后台在分析 生成对应的sql。

还有就是ajax 移动一次修改一次。

2008年6月11日 20:29
0 0

同问,请高手来解答

2008年6月05日 13:31
0 0

PS :

the talbe  of Your DataBase  have to three  ID filed:

" ID   previousID   nextID "



Save the sort order,

when   display  it,   you  show by nextId and

the first Node's  previousID is  null or 0, 
the last Node's  nextID is null or 0

2008年6月04日 21:43
0 0



Sorry, my OS hasn't chinese input tool...........

And excuse my pool Englis..........-_-!


ago, I made a drag sort View  by ASP,

find the problem  the same to you.


My way is  that  use    Bidirectional   circle  chain talbe(双向循环链表)

Data structure.


you can have a  Google or Baidu

2008年6月04日 21:38
0 0

如果有十万条记录,你还要做这样的功能,就当我什么也没说。
如果在一千条记录以下,可以用啥希表这样的东西来记录改变的就可以了。
最后将啥希表里的数据传给服务器即可。
有主键的情况下,一次更新一两百条记录不算什么,更何况你这个功能用的人少,用的次数少,不用这么伤脑筋阿。
用数组也可以,查找,更新就行。最后将结果传给复务器。

2008年6月02日 12:44
0 0

需求要允许多个改变 一次提交
没注意看这个,
主要步骤在浏览器端了。
有难度

2008年5月29日 23:43
0 0

browser side ,or client side drag drop , handle the drag item and drop item

then request
swap.action?id1=1&id2=2&pos1=5&pos2=6

-> swap(id1,id2,pos1,pos2)

-> update pos= pos2 where id=id1
   update pos =pos1 where id = id2

如果只是交换,而没有插入操作的话,这种方法就可以了。

2008年5月29日 23:32
0 0

想不出有什么好的方法,帮__顶

2008年5月29日 23:13

相关推荐

Global site tag (gtag.js) - Google Analytics