(请教)分页算法问题!谢谢个位大虾进来帮帮小弟!

chenzhong370 2008-05-06 05:37:56
1 假如有100条数据,我想把其中10-15条,或者45-50条,或者65-70条显示在网页上,该怎么解决?最好有文字说明,有逻辑代码! 谢谢了!

2 分页有多少种解决方法,怎么解决呢?真假分页是什么意思?
...全文
66 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mansea_nee 2008-05-06
  • 打赏
  • 举报
回复
支持8楼
yuanmanguo 2008-05-06
  • 打赏
  • 举报
回复
mark
chenzhong370 2008-05-06
  • 打赏
  • 举报
回复
顶下!
JL99000 2008-05-06
  • 打赏
  • 举报
回复
1 假如有100条数据,我想把其中10-15条,或者45-50条,或者65-70条显示在网页上,该怎么解决?最好有文字说明,有逻辑代码! 谢了!
--
首先 严格意义上讲,你这个不像是分页,到想是只取部分数据,而10-15或者45-50是手动输入的还是由控件的分页来选择的,不太清楚
(1)如果是手动输入10-15或者45-50,则执行sql语句就OK了
SQL语句:
select * from (select top 5 * from (select top 15 * from tb where 条件='取得100条的条件')a )b
where 某个唯一标志 not in
(
(select top 5 某个唯一标志 from (select top 15 * from tb where 条件='取得100条的条件')a )b
)
(2)由控件的分页来得到我获取的是第几页和每页有多少记录,由存储过程来实现
存储过程如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


-- =============================================
-- Author:
-- Create date: 12 3 2007 8:10AM
-- Description: 自己玩的 哈哈
-- test: fenye 10,0
-- =============================================
ALTER PROCEDURE [dbo].[fenye]
(@pagesize int,@pageindex int)
AS
BEGIN
SET NOCOUNT ON;

declare @tablenew table(id int identity(1,1),t_id int)
declare @tablelower int
declare @tableuper int

set @tablelower=@pagesize*@pageindex
set @tableuper=@pagesize*@pageindex+@pagesize

set rowcount @tableuper

insert @tablenew(t_id)
select t_student.ID_i from t_student where t_student.ID_i>@tablelower
and t_student.ID_i<=@tableuper
order by t_student.ID_i
select t_student.* from t_student inner join @tablenew n on t_student.ID_i=n.t_id
order by t_student.ID_i
END
chenzhong370 2008-05-06
  • 打赏
  • 举报
回复

当你把15 和5变成动态的时候就可以实现--查询从m到n的记录了
————————————————————————————

变成动态是什么意思?怎么实现查询从m到n的记录?,m n的值没有确定的情况下!
JL99000 2008-05-06
  • 打赏
  • 举报
回复
2 分页有多少种解决方法,怎么解决呢?真假分页是什么意思?
--
首先回答这个问题吧
大致上有
1 控件的分页功能
2 控件和数据库结合实现的分页功能
所谓真分页就是我从库里取出的全部记录就是放在控件上的记录,像2
所谓假分页就是实际上从库里取出了全部记录,显示出来的是部分记录,他的实际性能并没有提高,像1
paulyjin 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 WO_YOU_XIE_SHANG_XIN 的回复:]
一般原理是top嵌套和正反排序的应用(必须有排序依据的字段)

比如取10-15条

SQL codeselect top 15 * from (select top 5 * from table1 order by id desc) order by id asc



可以根据需要的显示效果排序 再在外面嵌套一个top+排序
[/Quote]
---------------------------------
当你把15 和5变成动态的时候就可以实现--查询从m到n的记录了
panman294902466 2008-05-06
  • 打赏
  • 举报
回复
楼上正解!
地下室小红叔 2008-05-06
  • 打赏
  • 举报
回复
真分页么 就是上面的方法 仅取当前页的记录
假分页是取出所有的数据 但显示给用户时只列出当前页的数据 比如用dataGrid/gridView控件自带的分页功能实现的分页
地下室小红叔 2008-05-06
  • 打赏
  • 举报
回复
上例写反了不好意思
这样
select top 5 * from (select top 15 * from table1 order by id desc) order by id asc
实际应用中 15/5 两个重要值通过页大小、当前页码、总记录数等得出
如5即为页大小 15由当前页码和页大小得到 当前页码为3 所以15=5*3
当然会有多种情况 灵活判断
地下室小红叔 2008-05-06
  • 打赏
  • 举报
回复
一般原理是top嵌套和正反排序的应用(必须有排序依据的字段)

比如取10-15条
select top 15 * from (select top 5 * from table1 order by id desc) order by id asc


可以根据需要的显示效果排序 再在外面嵌套一个top+排序

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧