怎么搞得,我发的帖子中的第二点居然没截断了,现在补发第2点如下:    2.读取数组A中第一个帖子的帖号(例如77),写入数组B,然后读取数据库中所有父贴号==77的帖子,将其中的第一个子贴号(例如80)写入数组B,然后以此办法循环读取80的子贴,子贴的子贴……全部读取后再读取77的第二个子贴,乃至其子贴全部读出,得出的帖号都依次写入数组B;

解决方案 »

  1.   

    建议你下载csdn里的树状论坛1.5版本看看,里面的树状排序算法相信会有参考价值:它每个帖子都没有记录父帖子id,只有自己的id.
    其实说白了就是
    根帖子id是0.
    一级子帖子id是0.001,0.002,......
    二级子帖子id是0.001001,.......
    按id排序完成后各个帖子就可以显示出树状层次.
    想显示哪几个都不难.
      

  2.   

    to  GDXY(GBOY) :其实这招我早就想过,但我考虑虽然都是BBS,但每个BBS的主题和内容类型不一样,就会有不同的需要。
        你所说的这种方法有2个弊端:
        一、每级子贴的帖子数量要在1000之内,而对于讨论性或争论性很强的BBS,超过1000的子贴数是可能的;(如果以4位或更多位来保留余地,那么下面第二点的弊端就更明显了)
        二、如果有第12层子贴,那么它的帖号恐怕就太长了……
      

  3.   

    id的长度你不用担心,因为它虽然像一个小数,但是它根本是个字符串类型.它的排序函数根本不是用大于或者小于来比较,而是用strcmp比较字符串.
        至于到底多少层会有问题?你可以到http://c973.51.net/bbs/里面看看,里面超过12层的主题是有的,如果你不放心可以创建一个50层的看看,没有问题的(记得测试完删除哦).
      

  4.   

    也可以看看这个
    http://c973.51.net/forum
    是树状论坛新版本的Demo版,未完成但是帖子的显示基本没有问题.
      

  5.   

    to GDXY(GBOY):
        你说的地址,我已经看过了,你的意思我也明白,不过还是有一个问题:
        我做的BBS中有一个功能,就是用户可以自定义帖子的显示顺序:
        ①按照主帖的时间顺序排列显示;
        ②按照最新回复的子贴的时间顺序排列显示。
        如果按照你说的设计思路,那么只能形成①的方式,而如果希望达到②的要求,恐怕就复杂了,至少要增加一个列,重新计算帖子顺序,而且由于没有父贴/子贴的记录,恐怕重新计算也麻烦,最重要的是:每次回复子贴都要计算一系列的父贴顺序,写入操作太多了。
        不知我考虑的对不对……
      

  6.   

    父贴和子贴使用不同的 table,父贴 table 的多一个字段,记录最新回复时间,在每次回复时顺便更改父贴 table 的这个字段,省的每次都要搜索一遍。这样每次在显示 BBS 的时候两种显示方式仅仅是按父贴的两个不同字段来查询,这两种显示方式所消耗的资源基本就没区别了
      

  7.   

    to: platinum(白金) 
        是我没有说明白,我希望的不仅是根帖按照最近回复进行翻新,同时各级父贴都能够翻新,这该如何设计才能最低限度的消耗资源呢?
      

  8.   

    请问csdn里的树状论坛1.5版本哪里有?
      

  9.   

    你是树型的啊……我不喜欢那种风格的,得挨个帖子点,麻烦也麻烦死了,如果事先全展开的整个论坛更是难看的很你这样的可以就一个 table,在每个帖子增加一个字段,如果一个子贴,其所有父帖、爷爷贴……的这个最后回复字段都更新一下,总可以提前计算完的就装进一个字段,减少搜索和查询的次数to RobinCat首页 -=> 软件 -=> 源程序/PHP
      

  10.   

    to platinum(白金)  :
        我现在的BBS就是这么做的啊,但速度确实不好啊,我觉得2000个帖子根本不算多,但速度已经慢得受不了了,有没有更好的算法或是设计思路呢?
      

  11.   

    to platinum(白金)  :收到~多谢~
      

  12.   

    首先,应该优化一下,像我们系里面,只查找最近一天或3天的贴子
    然后用户也可以转换成显示所有,感觉上会快好多(好像没解决问题)
    然后去zend上抓一个优化器,
    对了,在找找数学系的,那帮家伙,很厉害