搭建论坛《搭建之星》论坛数据库交流 → Access也可以实现limit类似的功能


  共有1697人关注过本帖树形打印

主题:Access也可以实现limit类似的功能

美女呀,离线,留言给我吧!
dbs
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:助工 帖子:230 积分:1931 威望:0 精华:0 注册:2006-5-15 11:16:55
Access也可以实现limit类似的功能  发帖心情 Post By:2014-2-11 10:46:47

文档发布模块初步实现了基本功能。另外,开发过程中遇到了一点小麻烦。服务器管理员以前承诺服务器有Mysql数据库,所以我的程序是按照Mysql开发的,后来我发现没有Mysql管理功能,经过询问才知道该数据库还没有开放使用,My God!! 只能临时把数据库操作模块改成Access的了。

     今天把Access中的翻页问题解决了,主要的思路是“掐头去尾”法。因为Mysql数据库支持LIMIT语句,所以使得翻页易如反掌,比如我们可以这么写:

SELECT * FROM Doc WHERE docSort=‘Java’ LIMIT 0,30 

表示从第1条开始取30条记录。但其他数据库都不支持这个语句,所以只能另辟蹊径了,下面就来介绍一下“掐头去尾”法。此方法主要是利用了Access数据库的排序功能和TOP语句,我们都知道如果要显示前N条记录可以这样写:

SELECT TOP N * FROM Doc

这使用起来很方便。我们还可以扩展一下:

SELECT TOP N * FROM (SELECT TOP 2N * FROM Doc WHERE docSort=’Java’ ORDER BY id DESC) ORDER BY id ASC

到这里我想大家已经都明白了吧,子查询得到逆序排列的前2N条记录,然后把这2N条记录按正序排列得到前N条记录。OK了,这里的前N条记录,实际上就是我们想要的第N到第2N条记录。下面是一个具体的例子:
注:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为0)均为变量,请相应处理。
SELECT * FROM 
(
    SELECT TOP [PageSize] * FROM 
    (
        SELECT TOP [PageSize * (PageIndex + 1)] * FROM Doc WHERE docSort=’Java’ ORDER BY id DESC
    ) 
    ORDER BY id ASC
)
ORDER BY id DESC

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
shanxiren
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:爱好者 帖子:52 积分:338 威望:0 精华:0 注册:2012-9-7 14:56:50
  发帖心情 Post By:2014-2-13 8:54:56

非常感谢分享!

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

Access也可以实现limit类似的功能








签名