有没有什么好的数据排序算法? 你为什么不联合id 和ORDER 一起操作呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "记录前一项和后一项的id" ----------肯定是需要记录的"你为什么不联合id 和ORDER 一起操作呢?" ---------一般来说肯定是这样做的,没id怎么确定记录呢?不知道你具体指的是什么。""前移","后移"的实现难度不大,难的是,第四页的一条记录要前移到第一页,那有的你写的了" -----暂不考虑分页感谢大家以上的回复,可是对先前的算法仍然没有什么改进啊! 我这几天自己对原算法进行了一点改进。原表结构不变,添加时对order自动的值做一点规范,使其为基数为2,差为2的等差数列,也就是order的值理论上是2,4,6,8,10,...。 达到这个效果也很简单,就是每次添加一条记录的时候,都先把已经存在记录的最大order取出来(比如存储为maxorder),新增的记录的order则为maxorder+2.处理"前移","后移"操作没什么变化,就是记录id,然后将两个id的order值互换。处理“插入”操作则有很大变化,例如下表数据(按order排列):¦--id-- ¦-----choice----- ¦---order--- ¦ ------------------------------------------------------- ¦ 1 ¦ aaaaaa ¦ 2 ¦ ¦ 6 ¦ gggggg ¦ 4 ¦ ¦ 2 ¦ bbbbbb ¦ 6 ¦ ¦ 3 ¦ pppppp ¦ 8 ¦ ¦ 9 ¦ dddddd ¦ 10 ¦ ¦ 5 ¦ cccccc ¦ 12 ¦ 如果要将id=6的数据插入到id=9的前面,则按照下面的步骤操作:1.id=9的order取出:rel_order=102.new_order = rel_order-1(将id=9的order减1)3.将id=6的order更新为new_order。此时全部order的值变为“2,6,8,9,10,12”4.按序洗牌:取出全部数据并按照新order排序,循环重设order的值,将其重新改为基数为2,差为2的等差数列这样顺序就改过来了,当然有个条件,就是总排序数据量一定不能过大,控制在100以内,不然数据操作量过大,不适合采用本方法,我也有一些想法,下次更新。 fgets问题 .net 怎么才能从出手到成手该怎么做 请教高手:如何读取网页中的表格数据到数组中 怎么开发多语言版网站啊 ??? 请问如何把文本文件导入到MYSQL中 送100分 smarty 的if 和section问题 一个FORM,两个图片按钮? 谁能帮忙遍一个小的php程序呀,给我看看 怎么告诉我URL错误! 招PHPer 浦东软件园靠近金科路地铁站 搜索引擎下载 想在PHP中使用应用级变量
原表结构不变,添加时对order自动的值做一点规范,使其为基数为2,差为2的等差数列,也就是order的值理论上是2,4,6,8,10,...。 达到这个效果也很简单,就是每次添加一条记录的时候,都先把已经存在记录的最大order取出来(比如存储为maxorder),新增的记录的order则为maxorder+2.处理"前移","后移"操作没什么变化,就是记录id,然后将两个id的order值互换。处理“插入”操作则有很大变化,例如下表数据(按order排列):
¦--id-- ¦-----choice----- ¦---order--- ¦
-------------------------------------------------------
¦ 1 ¦ aaaaaa ¦ 2 ¦
¦ 6 ¦ gggggg ¦ 4 ¦
¦ 2 ¦ bbbbbb ¦ 6 ¦
¦ 3 ¦ pppppp ¦ 8 ¦
¦ 9 ¦ dddddd ¦ 10 ¦
¦ 5 ¦ cccccc ¦ 12 ¦ 如果要将id=6的数据插入到id=9的前面,则按照下面的步骤操作:
1.id=9的order取出:rel_order=10
2.new_order = rel_order-1(将id=9的order减1)
3.将id=6的order更新为new_order。此时全部order的值变为“2,6,8,9,10,12”
4.按序洗牌:取出全部数据并按照新order排序,循环重设order的值,将其重新改为基数为2,差为2的等差数列
这样顺序就改过来了,当然有个条件,就是总排序数据量一定不能过大,控制在100以内,不然数据操作量过大,不适合采用本方法,我也有一些想法,下次更新。