数据表结构如下:
id name order_id 记录
int(递增) string int 第几条记录
当插入数据的时候让order_id=id
当取出的时候order by order_id
假如取出的记录如下:
记录1 (此时他的order_id是1)
记录2 (此时他的order_id是2)
记录3 (此时他的order_id是3)
记录4 (此时他的order_id是4)
记录5 (此时他的order_id是5)
.....
记录X (此时他的order_id是X)
现在的问题是如果要让他显示的顺序是:
记录1
记录5
记录2
记录3
记录4
....
记录X
应该如何修改记录5的order_id呢?
我想了两种办法都好象有问题
1,把记录5的order_id改成2,把order_id从3开始都加1,这样如果数据量大那就完了
2,把记录5的order_id改成记录2的order_id-0.001,也就是改成1.999,同时把order_id设置为float,
但是这也有个问题,如果这个时候再把记录6放到记录2的前面的话那记录6的order_id也就成了记录2的order-id-1,也就是成了1.999,出现了两个相同的order_id那排序就是空话拉
应该怎么样解决呢?
可以解决吗?
请指教,谢谢!!!
id name order_id 记录
int(递增) string int 第几条记录
当插入数据的时候让order_id=id
当取出的时候order by order_id
假如取出的记录如下:
记录1 (此时他的order_id是1)
记录2 (此时他的order_id是2)
记录3 (此时他的order_id是3)
记录4 (此时他的order_id是4)
记录5 (此时他的order_id是5)
.....
记录X (此时他的order_id是X)
现在的问题是如果要让他显示的顺序是:
记录1
记录5
记录2
记录3
记录4
....
记录X
应该如何修改记录5的order_id呢?
我想了两种办法都好象有问题
1,把记录5的order_id改成2,把order_id从3开始都加1,这样如果数据量大那就完了
2,把记录5的order_id改成记录2的order_id-0.001,也就是改成1.999,同时把order_id设置为float,
但是这也有个问题,如果这个时候再把记录6放到记录2的前面的话那记录6的order_id也就成了记录2的order-id-1,也就是成了1.999,出现了两个相同的order_id那排序就是空话拉
应该怎么样解决呢?
可以解决吗?
请指教,谢谢!!!
解决方案 »
- asp.net高分求解答
- 求助,如何实现类似在csdn论坛中,当鼠标放在头向上的时候,动态的显示相关信息
- OA的电子流程
- 帮忙来看一下:"Internet Explorer 无法打开Internet站点http://localhost/Test/webform1.aspx 已终止操作"
- <求救>新建asp.net应用程序提示:http:/1.1 500 server error
- 在DataGrid模板列中添加一checkBox控件后,如何让此checkBox控件触发其CheckedChanged事件???急!
- 分页时:如果原先翻页到第5页(共10页),又重新绑定数据源(共1页),这时出错,请问高手...?
- 关于网页对话框的问题,高手请进。。。。急。。。
- 请教高手,在.net下用CrystalReportViewer调用一个带参数的水晶报表时,利用控件自带的导出按钮出现下面的错误这是为何?
- 碰到一个难题,请大虾们帮忙看看,谢谢!
- 已有打开的与此连接相关联的 DataReader,必须首先将它关闭
- 页面加载时的问题
就是先把 大于 2 的 order_id 都加以 就是向下移动,然后在修改就可以了。
置于数据量大,可以先不考虑的或者是做个实验,看看到底能慢到什么程度。
可以请你再说详细点吗?
1 记录1 1 1
2 记录2 2 0
3 记录3 3 0
4 记录4 4 0
5 记录5 5 1sortid是辅助列,是不用显示的列,目的只是为了排序。
Select * From table Order By sortid, orderid
如果按照我的猜测:移动记录后,下次要记住记录的位置,那么你不得不操作数据库了。不知道是不是这样?疑问多多。你提问反倒变成我问你了,反客为主了,哈哈。
1,把记录5的order_id改成2,把order_id从3开始都加1,这样如果数据量大那就完
了
我的优化方案:order_id的初值为
100
200
300
400
500
.
.
.那么将500这条记录移到200之前100之后的做法为:
如果200与100相等(这应该是在100和200之间插入了100次后才会出现的情况,很难出现这种情况),将所有的order_id乘100,否则
(200 + 100)/2 取整 为了以前500的新的order_id值更新它这样更新所有order_id的几率是很小的,看你的实际情况,估计一般不会出现
所以通常情况只更新了一个order_id的值,绝对效率很高注意这里int的最大值为2147483647 也就是除以100能存2百多万的数据
如果你的数据超过200万,你应考试使用bigint
假设10W只是所有数据的一个0条吧
为什么要这样设计呢?
因为就比如ie的收藏夹
每个用户都可能有上1000条记录吧
如果用户一多,每个用户都给他建个表是不可以的
所以把他们全部放到一个表中至于YX,你的方法很好
但是我好象无法得到上一条数据的order-id
比如我拖动第五条到第二条前面
我只能够得到第二条的order-id
而可能无法得到排在第二条前面的那记录的order-id
谢谢
我真想不通前一条记录的order-id怎么很容易找到
如果真的很容易的话那就好了啊
只是不能够帖图
如果能够帖图的话那我就能够说的一清二楚拉
谢谢
数据记录理论上说应该是无穷大,但是对于单个用户来说他的记录最多应该不会超过2000条
第一条记录 order_id=1
第二条记录 order_id=2
第三条记录 order_id=3
第四条记录 order_id=4
第五条记录 order_id=5
第六条记录 order_id=6
..................
如果把第五条记录插到第二条记录的前面
一>.我先找到第二条记录的order-id值2,
二>.然后根据第二条记录的order-id值2找到第一个order_id小
于2的那条记录,把他的order_id+1,如果等于第二条记录的order-id,那么就把大于order_id>=2
的所有的有关这个用户的order_id修改成+1,然后把第五条的order_id设为2不知道这样可以吗?>
就直接把第五条记录的order_id = 第二条记录的order_id-1
谢谢
我还加了个parent_id
给相同用户的数据分下组
就不多拉
谢谢
结帐
order by sortid,order_id
2的20次方 1M
2的30次方 1G
2的31次方 2G
2的32次方 4G
2的40次方 1000G = 1T
2的50次方 1000000G = 1?
2的64次方 ?????????? 这就是bigint
还是这么多条记录,一条记录才仅仅1B吗?