非id排序有没有比较理想的分页办法?
以前用ID唯一做分页排序 还好办 select top 20 ...... where id<=(select min(id) from (select ......)) order by id desc 就可以搞定速度也很快。
但现在要先通过另一个字段 best 排序后再ID 排序。 best 字段有两个值0或者1。
......order by best desc,id desc
表
t1
字段 类型
id int
title nvchar
content ntext
best tinyint
问题点数:10、回复次数:11Top
1 楼LouisXIV(夜游神)回复于 2006-07-01 20:24:54 得分 0
写入临时表并重建一个idTop
2 楼lzhs(快乐至上)回复于 2006-07-01 22:17:43 得分 0
楼上的方法具体这样实现:
SELECT IDENTITY(int, 1,1) AS ID,*
INTO #Temp
FROM [YourTalbe]
order by best desc
再对#Temp用原来的方法来分页。
Top
3 楼luoqun_ncs(暂时冰封)回复于 2006-07-02 13:31:37 得分 1
三个办法,如果要减少网络负载,那么用临时表+id的方法。但是对tempdb压力比较大。如果不考虑网络负载,可以在ado那边截取。最后就是升级到sqlserver2005Top
4 楼jimnet(jim)回复于 2006-07-06 01:11:56 得分 0
楼上说的sql2005 这个我还没怎么看过能简单介绍一下么。 或者提几个对象的关键字 我也好搜索一下相关资料。谢谢。Top
5 楼dutguoyi(新鲜鱼排)回复于 2006-07-06 09:58:47 得分 1
排序,並不是只有ID可以排序的。Top
6 楼lzhs(快乐至上)回复于 2006-07-06 12:57:28 得分 1
但是有了ID列会相当的方便 ^_^Top
7 楼luoqun_ncs(暂时冰封)回复于 2006-07-07 12:55:46 得分 1
http://www.google.com/search?hl=zh-CN&q=sql2005+%E5%88%86%E9%A1%B5&btnG=Google+%E6%90%9C%E7%B4%A2&lr=Top
8 楼Simore(simore)回复于 2006-07-10 17:20:11 得分 0
--------------------------------------------------------------
您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx
在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。
2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!
此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。
您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=14&pointid2=1&pointid3=5
非常感谢您对本次活动的支持!
--------------------------------------------------------------Top
9 楼liminlovemama( 大森林)回复于 2006-07-10 17:30:56 得分 3
比如..一页显示20条记录..
取第二页时...取出 TOP 40
然后 把取出结果...倒过来排序..再取TOP 20 再倒回来排序..
要考虑到..有可能记录没达到2页..
我已经实现过了..很不错..就是SQL语句写的复杂了点..Top
10 楼luoqun_ncs(暂时冰封)回复于 2006-07-12 10:28:13 得分 3
如果没有唯一列,做两次top分页会有问题了
加入你做sort的那列的值只有很少几个(你可以把那列的值设成同样的来试验),分页后会发现有几页的内容是一样的。Top
11 楼jimnet(jim)回复于 2006-07-14 03:39:14 得分 0
的确如 luoqun_ncs(暂时冰封) 说。 这种应用 使用TOP没有唯一性没法排。
http://www.bestdba.cn/match_discussion3.aspx?pointid=14&pointid2=1&pointid3=5
这个推荐大家看看。里面介绍的方法不错。里面的邹建的几个办法都不错。那个两个top嵌套的办法也就是liminlovemama(大森林) 说的这种 如果只计算id和best 应该是比较快的。
是写成这样对吧:
select * from t1 where id in(select top 20 id from (select top 400 id,best from t1 where ..... order by best desc,id desc) a order by best asc,id asc)Top




