
页面上有无限制div行数的数据,比如
name order
a 1
b 2
c 3
d 4
e 5
f 6
1、首先把b拖到a前面,我的做法是当遇到最顶端的数值时把他们的序号1/2=0.5
2、把b拖到c和d之间,做法是把(3+4)/2=3.5
3、把b拖拽到f后面,当遇到最末端的数值时把他们的序号6+1=7
这时候把3种情况name为b的序号值保存进数据库,下次刷新排序之后的结果看起来是没有问题的
但这玩意用久了,也就是说给管理员拖了很多次b的数据之后会不停的上下相加然后相除,虽然序号我定义的是double类型,但已经去到-28E位数,记得到-32E就会超出double的长度。所以我觉得我这样做是绝对只能是用一时的半成品,功能的要求又想实时拖拽,实时保存进数据库,而不想点击按钮来统一保存。
请教朋友们有没有比较好的算法来处理这种问题,有人提出用链表,但我还是理解不得,具体做法
简单回答:不能,也不应该。要依某个顺序查询,请加入明确的排序指令,否则系统就会依系统认为最方便高效的方式给你列出数据。
相关说明:
1、当前主流的使用SQL *** 作的数据数主要是Oracle、MS Sql Server等等。它们有一个共同的做法,就是用户不应对表中的物理记录的顺序进行关心。如果用户需要对查询出的记录进行排序的话,请加入排序指令,这样就能按用户的“心意”进行排序列出了。
2、之所以用户不应对表中的特理记录的顺序进行关心,那是因为通常情况下,一个表中的数据是会经常被更改、修正、删增的,如果每一次的改动都要将整个表的物理顺序进行修正的话,系统的运行效率就会严重低下。
3、如果你实在纠结,实在要在明确的排序指令的情况下查出的数据也按你的想法的顺序出来的话,一般来说,小的数据表你可以将原来的数据删除,然后重新追回进去。具体的做法类似于先SELECT,加order排序指令插入到临时表,然后删除原来表中的数据,然后insert临时表中的数据到原表中。注意的是,这种方法对数据量不大的表,多数情况下有效,但对大量数据的表,很可能无效,因为系统为了效率,会按它的“想法”去读写数据。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)