CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

非id排序有没有比较理想的分页办法?

楼主jimnet(jim)2006-07-01 20:15:09 在 MS-SQL Server / 基础类 提问

以前用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

相关问题

关键词

得分解答快速导航

  • 帖主:jimnet
  • luoqun_ncs
  • dutguoyi
  • lzhs
  • luoqun_ncs
  • liminlovemama
  • luoqun_ncs

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo