数据表结构如下:字段Id 字段1 字段2 字段3通常我们会用一个自增长的Id来进行排序,方法:取出要翻到的页码的前一页的最大或最小id,然后大于或小于这个Id再Top一下就可以。
但我的问题是:先要按别的字段排序如 order by 字段1 desc, 字段12 desc.这时候字段Id 已经打乱了没有作用。我怎么能取出应该翻页取的数据?(也就是要取10-20条数据不能取1-20条)。大家发表意见,顶者有分!
但我的问题是:先要按别的字段排序如 order by 字段1 desc, 字段12 desc.这时候字段Id 已经打乱了没有作用。我怎么能取出应该翻页取的数据?(也就是要取10-20条数据不能取1-20条)。大家发表意见,顶者有分!
解决方案 »
- Gridview获取行ID值问题 急救助!
- 为什么jquery代码在本地服务器和真实服务器运行结果不一样
- ASP.NET MVC3中远程验证的问题
- 求大神指点指点!
- 在IE7浏览器中.Net页面会显示乱码,请问大家有没有解决方案?谢谢!
- javascript不执行
- 如何得到DATAGRID中指定值的哪一行的行号?比如得到ID=“20050202001”这一行所在行的行号,如果不用循环的话?
- [总结]发送邮件共有几种方法,谁有测试成功的例子 200分
- 水晶报表中饼形图不显示,急!急!!急!!!(只有30分了)
- 哪位老大,帮我看看这到底为什么。,, DataGrid分页出现怪问题?(在线等待,十万火急)
- 请问我数据库里有东西但是怎么什么都不显示??页面也没出现错误提示
- 一个字符编码的问题
select Top 10 from 表 where id not in (select id from 表 order by 字段1 desc, 字段12 desc) order by 字段1 desc, 字段12 desc
应该可以,效率可能会差一些,不过数据量不大时应该没问题。
但是效率会比你那种真分页的低点点!
hui1202(骨灰):你说具体一点,第二次怎么从dataset里面取了?
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@Iscount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strwhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
ASdeclare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
endset @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrderif @strwhere != ''
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strwhere + " "
+ @strOrder + ") as tblTmp) and " + @strwhere + " " + @strOrderif @PageIndex = 1
begin
set @strTmp = ""
if @strwhere != ''
set @strTmp = " where " + @strwhere set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
endif @Iscount != 0
set @strSQL = "select count(*) as Total from [" + @tblName + "]"exec (@strSQL)
GO
这个存储过程可以实现分页,但不清楚是不是你想要的功能(只能实现单字段排续)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
insert into @indextable(nid) select id from news order by addtime desc
select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid
and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
end
看看这个