求解:关于论坛中帖子的分页显示的设计思路

kkk2kkk 2002-03-14 07:22:50
在BBS中,如何快速、及时的分页显示?(要求父贴与子贴按时间树状排列,每页共显示25个帖子)
我的设计是:
1.读取所有的主帖号及其发贴时间,进行排序后写入数组A
2.读取数组A中第一个帖子的帖号(例如77),写入数组B,然后读取数据库中所有父贴号==77的帖子,将其中的第一个子贴号(例如80)写入数组B,然后以此办法循环读取80的子贴,子贴的子贴……全部读取后再读取77的第二个子贴,乃至其子贴全部读出,得出的帖号都依次写入数组B;
3.以此办法循环读取第二个主帖及其所有子贴,得出的帖号都依次写入数组B;
4.最后,数组B就是BBS所有帖子的顺序列表,然后可以任意读取其中某25个帖子。

这样做固然可以达到目的,但帖子数量少时还凑合,一旦帖子数量超过1000,就慢得受不了了,因为这种方法相当于每次上下翻页都要重新排序一次;当帖子数量达到2000时,页面的等待时间已经长达50妙。

所以求教大家:有没有更好的排序、分页方法?
(大家只要说说思路即可,不必帖代码)
...全文
72 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xinxin1982 2002-03-18
首先,应该优化一下,像我们系里面,只查找最近一天或3天的贴子
然后用户也可以转换成显示所有,感觉上会快好多(好像没解决问题)
然后去zend上抓一个优化器,
对了,在找找数学系的,那帮家伙,很厉害
回复
RobinCat 2002-03-18
to platinum(白金) :

收到~多谢~
回复
kkk2kkk 2002-03-18
to platinum(白金) :
我现在的BBS就是这么做的啊,但速度确实不好啊,我觉得2000个帖子根本不算多,但速度已经慢得受不了了,有没有更好的算法或是设计思路呢?
回复
kkk2kkk 2002-03-16
to GDXY(GBOY):
你说的地址,我已经看过了,你的意思我也明白,不过还是有一个问题:
我做的BBS中有一个功能,就是用户可以自定义帖子的显示顺序:
①按照主帖的时间顺序排列显示;
②按照最新回复的子贴的时间顺序排列显示。
如果按照你说的设计思路,那么只能形成①的方式,而如果希望达到②的要求,恐怕就复杂了,至少要增加一个列,重新计算帖子顺序,而且由于没有父贴/子贴的记录,恐怕重新计算也麻烦,最重要的是:每次回复子贴都要计算一系列的父贴顺序,写入操作太多了。
不知我考虑的对不对……
回复
platinum 2002-03-16
你是树型的啊……我不喜欢那种风格的,得挨个帖子点,麻烦也麻烦死了,如果事先全展开的整个论坛更是难看的很

你这样的可以就一个 table,在每个帖子增加一个字段,如果一个子贴,其所有父帖、爷爷贴……的这个最后回复字段都更新一下,总可以提前计算完的就装进一个字段,减少搜索和查询的次数

to RobinCat

首页 -=> 软件 -=> 源程序/PHP
回复
RobinCat 2002-03-16
请问csdn里的树状论坛1.5版本哪里有?
回复
kkk2kkk 2002-03-16
to: platinum(白金)
是我没有说明白,我希望的不仅是根帖按照最近回复进行翻新,同时各级父贴都能够翻新,这该如何设计才能最低限度的消耗资源呢?
回复
platinum 2002-03-16
父贴和子贴使用不同的 table,父贴 table 的多一个字段,记录最新回复时间,在每次回复时顺便更改父贴 table 的这个字段,省的每次都要搜索一遍。这样每次在显示 BBS 的时候两种显示方式仅仅是按父贴的两个不同字段来查询,这两种显示方式所消耗的资源基本就没区别了
回复
GDXY 2002-03-15
也可以看看这个
http://c973.51.net/forum
是树状论坛新版本的Demo版,未完成但是帖子的显示基本没有问题.
回复
GDXY 2002-03-15
id的长度你不用担心,因为它虽然像一个小数,但是它根本是个字符串类型.它的排序函数根本不是用大于或者小于来比较,而是用strcmp比较字符串.
至于到底多少层会有问题?你可以到http://c973.51.net/bbs/里面看看,里面超过12层的主题是有的,如果你不放心可以创建一个50层的看看,没有问题的(记得测试完删除哦).
回复
kkk2kkk 2002-03-15
to GDXY(GBOY) :其实这招我早就想过,但我考虑虽然都是BBS,但每个BBS的主题和内容类型不一样,就会有不同的需要。
你所说的这种方法有2个弊端:
一、每级子贴的帖子数量要在1000之内,而对于讨论性或争论性很强的BBS,超过1000的子贴数是可能的;(如果以4位或更多位来保留余地,那么下面第二点的弊端就更明显了)
二、如果有第12层子贴,那么它的帖号恐怕就太长了……
回复
platinum 2002-03-14
Goodidea
回复
GDXY 2002-03-14
建议你下载csdn里的树状论坛1.5版本看看,里面的树状排序算法相信会有参考价值:它每个帖子都没有记录父帖子id,只有自己的id.
其实说白了就是
根帖子id是0.
一级子帖子id是0.001,0.002,......
二级子帖子id是0.001001,.......
按id排序完成后各个帖子就可以显示出树状层次.
想显示哪几个都不难.
回复
sangzier 2002-03-14
UP!
回复
RobinCat 2002-03-14
g关注中……
回复
kkk2kkk 2002-03-14
怎么搞得,我发的帖子中的第二点居然没截断了,现在补发第2点如下:

2.读取数组A中第一个帖子的帖号(例如77),写入数组B,然后读取数据库中所有父贴号==77的帖子,将其中的第一个子贴号(例如80)写入数组B,然后以此办法循环读取80的子贴,子贴的子贴……全部读取后再读取77的第二个子贴,乃至其子贴全部读出,得出的帖号都依次写入数组B;
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2002-03-14 07:22
社区公告
暂无公告