论坛关键技术,树状记录表的堆栈展开

    由于工作原因,涉及到一个树状存放记录的表,要求程序中把树状表全部展开,并输出相应的数据內容。由于涉及到此种操作的地方很多,比如网络上的\\\"论坛"就是典型的采用树状存放记录的表,特此整理出来与大家分享。
     在很多资料都有介绍展开树状记录的程序,但是很多是采用递归的方法。我們知道,递归的方法逻辑比较简单,实际操作起来比较容易。但是递归有一个最大的缺点就是占用资源太多,速度太慢。如果在互联网的"论坛"上采用此种方法,在表记录很多的情况下将是一个非常严重的问题。下面的程序在笔者的工作中解决了一个大问题并将应用于本人小站(yuking.126.com)的论坛。
     我这里采用速度非常快的堆栈来实现这种操作,但是操作起来相对而言难度加大。我们就以论坛记录表为例讲解这一过程,首先了解一下表结构:

一、表结构(article)
     self       int    '本记录ID号
     father     int    '父记录ID号
     title      char   '贴子标题
     author     char   '贴子作者
     datetime   date   '发贴日期时间
     hits       int    '点击数
     reply      int    '回复数
      .....            '根据具体的情况我们还可以有更多的字段
     1)关键说明:self是记录本记录的ID号,这应该是一个自动增长的字段,不充许重复。father是记录本结点的父结点ID号的字段,若该记录内容为"回贴"此字段值应该为"主贴"的ID号。若该记录为"主贴"则它的父结点应该为"0"
     2)如下两条记录是父子记录:
      self   father     title                       author       .....
            1       0        '谁能帮帮我'               '三脚猫'
            2       1        '我能帮你什么忙吗?'       '网上飞'
        
二、操作方法
      首先,我们读出所有父结点为"0"的记录也就是"主贴",统统放入堆栈中。然后输出位于栈顶的一条记录("主贴")数据,并清空栈顶,栈頂下移一格。接着查找所有父结点为该栈项结点("主贴")的记录("回贴"),也统统放于栈顶。注意到没有,就这两步我们就完成了把一条父记录输出并展开其子结点的工作。余下的工作只是依次类推而已了,直到栈为空为止。
     当然实际操作时可能还会有一些要求,比如要求得到记录的层数,回复数等等问题,我们只需稍加改进就能实现。
           
三、这里是整理后的原代码
<%
set RS=server.CreateObject("ADODB.Recordset")

sql_text="select * from article where father=0 order by datetime desc"
RS.Open sql_text,Bbs_ConnectionString  '查找所有父结点为'0'的结点,即"主贴"。

Dim Stack(100,8)   '定义堆栈,我这里是100('8'是指每个栈元素分别存放8个字段值)。'可根据实际情况定义堆栈大小,可以按这个公式计算"最多层数*最多展开数"。
while not Rs.eof
    Stack(0,0)=RS("self")
    Stack(0,1)=RS("father")
    Stack(0,2)=RS("title")
    Stack(0,3)=RS("author")
    Stack(0,4)=RS("datetime")
    Stack(0,5)=RS("hits")
    Stack(0,6)=RS("reply")
    Stack(0,7)=0
        Top=1
        do until Top=0
        Sql_text="select * from article where father="&StackTop&"
        RS1.Open Sql_text,MyConn    '查找所有父结点为栈顶结点的记录
             '输出栈项元素,我这里是直接输出,实际做的时候可以产生表格等等效果
        for i=0 to 7     
                 Response.write stack(top-1,i)  
        next

        ParentLevel=stack(top-1,7)      '清空堆栈之前获得父记录的层数
        for i=0 to 7                  

时间: 2024-11-02 10:19:19

论坛关键技术,树状记录表的堆栈展开的相关文章

论坛树状记录表的堆栈展开

由于工作原因,涉及到一个树状存放记录的表,要求程序中把树状表全部展开,并输出相应的数据內容.由于涉及到此种操作的地方很多,比如网络上的\\\"论坛"就是典型的采用树状存放记录的表,特此整理出来与大家分享.在很多资料都有介绍展开树状记录的程序,但是很多是采用递归的方法.我們知道,递归的方法逻辑比较简单,实际操作起来比较容易.但是递归有一个最大的缺点就是占用资源太多,速度太慢.如果在互联网的"论坛"上采用此种方法,在表记录很多的情况下将是一个非常严重的问题.下面的程序在

【JAVA秒会技术之搞定数据库递归树】Mysql快速实现递归树状查询

Mysql快速实现递归树状查询 [前言]今天一个好朋友问我的这个问题,以前也没有用到过,恰好有时间,就帮他研究了一下,纯属"现学现卖",正好在过程中,自己也能学习一下!个人感觉,其实一点也不难,不过是"闻道有先后",我们是"后"罢了.按照我的习惯,学完东西,总要总结一下嘛,也当做一个备忘录了.   具体需求就不描述了,简而言之,归结为两个: 1.如何通过子节点(cid)加载出所有的父节点(pid)? 2.如何通过父节点(pid)加载出所有的子节点

从制造品树状供应链到协同服务

第1页车联网发展催生供应链盈利新模式 随着车载信息多媒体服务的发展,越来越多的多媒体应用植入车载信息系统,汽车联网模式已初露端倪.近日,在成都举办的2012中国汽车电子论坛暨半导体应用峰会(简称CAESA)上,也产生了来自从网络运营商到车厂等各个领域对于车联网下产业合作模式的分析与探讨. 从制造品树状供应链到协同服务 来自中国移动的首席科学家杨景教授表示,整个产业链将从现有的制造和供应服务转化为协同服务.现有的基于制造品关系的电信产品和服务其产品供应链的特点是大规模.低成本,而将要转向的基于协同

歌词同步关键技术

词同步关键技术重大升级!歌词时间快慢调整(全新<高效>思路)自动跟踪引擎(arguments) 运行代码框 <html><head><meta http-equiv=Content-Type content=text/html; charset=gb2312><title>谱乐视听 -- 千言万语</title><STYLE type=text/css>TD { FONT-SIZE: 9pt; LINE-HEIGHT: 1

使用“使用中值排序基数法”实现树状结构(一)

排序|排序 在BBS的编写中,经常有人问怎样实现树状结构?一个比较不负责任的回答是:使用递归算法.当然,递归是一个可行的办法(二叉树的历遍也好象只能使用递归算法),但对于BBS来说,这样做势必要进行大量的Sql查询(虽然可以使用存储过程来做,但要从根本上加快速度,则应该考虑更快的算法). 下面给出一个可行的彻底屏弃递的实现树状结构的算法. 下面给出另一种使用"使用中值排序基数法"实现树状结构: 一.主要思想:增加一个排序基数字段ordernum,回复同一根贴的贴子中插入贴子时,排序

“中值排序基数法实现树状结构”的补充

排序 "中值排序基数法实现树状结构"的补充     由于一时疏忽,造成了此法"对于int类型的基数字段,对原始贴的回复只能有31个:numeric类型的基数字段,对原始贴的回复也不能超过120个"(实际上是对于int型字段,原始贴的回复第32个以上的树状结构显示开始紊乱,对于numeric型的基数字段,原始贴的回复从121个以上树状结构显示开始紊乱--回复并不会出问题),这是由于计算机存储精度引起的.    我们可以将加贴的存储过程修改一下(加进前面加上**号的行)

密集波分复用光网络关键技术

摘要基于IP的数据业务的爆炸式发展带来了对带宽的无限需求,而密集波分复用(DWDM)系统在满足不断增长的带宽需求的同时还具有不可比拟的联网优势.本文对其关键技术进行了探讨. 关键词密集波分复用(DWDM)WDM光网络全光联网关健技术 WDM光网络在不断进步的同时仍有大量问题需要解决,如设备价格昂贵,标准化问题,如何在不同用户间分配波长,如何对用户鉴权以及保留性问题,串扰问题,一体化网络管理机制和互操作问题等.光联网的实现主要取决于关键网元设备的成熟与否.研究或发明可用于WDM的新技术和新器件具有

C#发现之旅-高性能ASP.NET树状列表控件(中)

第一段HTML代码块 若控件的"DynamicLoadChildNodes"属性值为true,也就是控件运行在客户端动态加载子节点,则输出支持客户端动态加载子节点的HTML代码,首先输出一个名为"SkyTreeViewControlTempXML"的XML数据岛标签,并将它的 "onreadystatechange"事件绑定到"SkyTreeViewControlDynamicLoadChildNodes"的 Javascri

azure-微软云的关键技术有哪些呢??

问题描述 微软云的关键技术有哪些呢?? 微软云的关键技术有哪些呢??微软云的关键技术有哪些呢??微软云的关键技术有哪些呢?? 解决方案 另外,微软还提供了System Center,加上Windows Server和各种软件,你还可以在企业内部搭建完整的私有云平台,更好的是,两者的软件和环境几乎完全相同,你不但可以将你的应用在这两者之间互相迁移,还可以混合使用私有云和公有云. 你可以使用Azure的虚拟网络和Active Dictionary将它们整合在一起. 解决方案二: Azure和国内山寨