关于基于 MS SQL SERVER 的论坛分页模块问题

anfield anfield 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
关于基于 MS SQL SERVER 的论坛分页模块问题

对于 mysql,有limit语句进行对特定访问数据的查询。但对于 MS SQL SERVER,就没有 limit语句了,由于我写的论坛(http://ynwa.yeah.net)是用 MS SQL SERVER做数据库服务器的。这个问题一度令我非常烦恼。最终,刚开始学 MS SQL SERVER的我看了很多书,找到了一个解决的方案,用一种叫“游标”的方法。
部分关键代码如下:
<?php
……
……
//访问数据库,在数据库建立游标,作分页显示用
//为已经按发表时间排列好的所有主题建立游标 num_of_topic
$str_select_message="declare num_of_topic SCROLL CURSOR FOR ";
$str_select_message.="select * from soccer_forum where message_pro='farther' and on_top=0 and table_id=$table_id order by lastest_time DESC";
$select_message=mssql_query($str_select_message);
//打开游标 num_of_topic
$str_open_cursor="open num_of_topic";
$open_cursor=mssql_query($str_open_cursor);
//计算每页开始,结束的数据的游标数(假设每页显示20条主题)的公式
$star_data=1+($page-1)*20;
$end_data=($page-1)*20+20;

//如果是最后一页,循环所列出的表格等于剩余的帖数
if($page==$total_pages){
$end_data=$total_data;
}
//显示主题,按每页开始,结束的游标访问数据库记录
for($i=$star_data;$i<=$end_data;$i++){
$str_query="fetch absolute $i from num_of_topic";
$query=mssql_query($str_query);
$fetch_object=mssql_fetch_object($query);
//get_message.php是用于循环显示已经调出的20条主题的模块
require("functions/get_message.php");
}

……
……
//以下是分页显示的页数链接(省略)
……
?>


问题好像解决了,本来以为可以用游标就能在用户打开特定页数时,数据库只访问特定的20条记录,这样会提高速度。但后来想了很久,发觉,我在建立游标之前,最终也用到了:
select * from soccer_forum where message_pro='farther' and on_top=0 and table_id=$table_id order by lastest_time DESC";
也就是说,在建立游标前,数据库先要访问所有数据,为所有数据按时间排列顺序,这样实际上只访问20条数据,但却要查询所有数据,会不会导致用户访问论坛时浪费了服务器的访问时间,导致调出数据缓慢呢?实际上,我的论坛暂时只有主题200多,连回复都不超过2000,我试过用SQL QUERY ANALYZER 用 select * from soccer_forum ,结果1000多条数据用了不过1秒。我惊叹数据库速度快之余,不禁又担心到,现在我论坛速度正常,会不会可能是主题很少,即使访问所有数据,也不会感到缓慢呢?我的分页模块,在理论上到底是合理,还是非常愚蠢呢?假设我的论坛主题多达数百万(当然不可能)时,访问速度是不变,还是提高数千倍呢?请各位高手告诉我理论上会出现的后果。

同时,以大家写论坛的经验,你们在用 MS SQL SERVER 做数据库时,你们是用什么方法建立分页模块的呢?
...全文

相关推荐

PR控制并网逆变器PSIM仿真

PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真PR控制并网逆变器PSIM仿真

qyh522

构建***论坛社区:Discuz! NT for SQL Server v1.0安装与配置

本文还有配套的精品资源,点击获取 简介: 是一个基于.NET Framework的服务器端网页开发技术,本压缩包提供了基于 的论坛系统Discuz! NT for SQL Server v1.0的正式版,它是一个为企业和组织提供的网络社区解决方案。此版本针对.NET Framework 2.0进行优化,集成了丰富的论坛功能并支持自定义模板和插件。...

媛源啊

PR控制psim.zip_PR控制器 PSIM_PSIM 并网仿真_PSIM PR控制_PSIM 全桥_pr

PSIM PR控制器全桥并网逆变,可以仿真。

四散

build-bluez-static.sh

# BlueZ 5.77 交叉编译脚本 (动态链接, 可在 OpenHarmony 上运行) # 工具链: gcc-arm-10.3-2021.07 (arm-none-linux-gnueabihf, glibc 2.33) # # 背景: OpenHarmony 使用 musl libc, 与 glibc 静态二进制不兼容 (NSS 问题) # 方案: 编译为动态链接, 打包 glibc 运行时 .so, 用自定义 ld-linux 启动

春风亭老朝1

国央企在开展内部创新项目时,如何有效进行技术成果的价值评估与资源筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论 7
收藏 已收藏
分享
返回顶部
anfield
基础编程 21,889 成员 140,329 内容