ALL IN ONE : 利用存储过程实现BBS树形结构的存储及有回复email通知(不必借助任何组件发Email)功能的实...

存储过程

    BBS的树形结构一直是大家讨论的话题,以前我做都是利用命名规则来实现,这样的好处是表的冗余字段少,结构清楚,容易理解,但其局限性也很明显。感谢廖家远提供算法(实话说,当年算法就没有学好),我决定采用一下这种算法来实现bbs的树形结构。基本思路如下:
    bbs文章表中有这样几个字段:
    RootID :   根ID , 新发贴子及其所有子贴都相同。
    FatherID:  父ID , 父贴子ID
    Layer:     层数 , 贴子在树中的深度。
    OrderNum:  排序基数,关键所在,根据它来排序。

基本算法举例如下:

根16(拿个小的举例)
id    ordernum              Layer                
1     16                     0
2     16+16/2                1   回复第1贴
3     16+16/(2^2)            1   回复第1贴
4     16+16/2+16/(2^3)       2   回复第2贴
5     16+16/(2^2)+16/(2^4)   2   回复第3贴

然后,根据排序的结果是(加上回复的深度,就成了树状结构)
id      ordernum                  深度
1       16                          0
3       16+16/(2^2)                 1
5       16+16/(2^2)+16/(2^4)        2
2       16+16/2                     1
4       16+16/2+16/(2^3)            2

成了这样的树:
1
  3
     5
  2
     4

根据以上思路,我们设计表如下:

/*BBS文章表*/
if exists (select * from sysobjects where ID = object_id("BBS"))
   drop table BBS
go

create table BBS
             (
        ID        int primary key identity        not null ,
                RootID        int        default 0        not null ,  
        FatherID    int         default 0        not null ,
        Layer        tinyint        default 0        not null ,
                ForumID         int             default 0        not null ,
        UserID        int        default 0        not null ,
        Title        varchar(255)    default ""        not null ,
        Content        text        default ""             ,
        PostTime  

时间: 2025-01-02 01:48:41

ALL IN ONE : 利用存储过程实现BBS树形结构的存储及有回复email通知(不必借助任何组件发Email)功能的实...的相关文章

ALL IN ONE:利用存储过程实现BBS树形结构的存储及有回复email通知功能的实现(三,完)

存储过程 下面读取纪录的存储过程:<br><br>if exists(select * from sysobjects where ID = object_id("up_GetTopic"))<br>   drop proc up_GetTopic<br>go<br><br>create proc up_GetTopic @a_intID int<br>   as<br>      decl

mssql server 树形结构的存储与查询实例

mssql server 树形结构的存储与查询实例 数据库教程设计中常常会遇到需要存储树形结构,比如员工关系表.组织结构表,等等. sql code --测试数据 create table #employees(     employeecode varchar(20) not null primary key clustered,     reporttocode varchar(20) null) go insert into #employees values('a',null) inse

bbs树形结构的实现方法(三)

下面这种方法是white提出来的. BBS数据库结构的浮点数表示法 BBS由一系列的文章组成,每篇文章有一些基本属性,比如作者,创建时间,文章编号等.其中最为重要的,用以表示树形结构的是层和序数.层表示位于文章树的第几层,最高层的帖子层等于0,其回复的层为1,回复的回复层为2,以此类推.所有层等于0的帖子依时间顺序其序数分别为1,2,3.....剩下的帖子的序数满足以下条件:当所有帖子按照树形显示的时候,其序数从大到小排列,没有例外. 上述方法具体到BBS的实现时,各种操作如下进行:0.系统维护

bbs树形结构的实现方法(一)

    bbs的树形结构显示可以有很多种方法,其中比较容易想到的是递归和排序串方法,但这两种方法并不是很好,那么怎样才算是比较合理的算法呢?    递归方法不用讲,大家都知道怎么用,先讲讲排序串方法,最简单的排序串方法可以这样用,只用一个id就可以完成树型,向这样1  0012  0023  0010014  0010010015  001002001用这个字符串排序后就变成这样:001   001001         001001001   001002001002 这种方法容易实现,但缺点

mysql树形结构查询(存储过程)

就用数据数据库表地址数据(中国地区)来说吧(用Windows请使用gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER //drop procedure if exists findLChild///* iid 递归父节点 , layer 允许递归深度 */CREATE PROCEDURE findLChild(iid bigint(20),layer bigint(20))BEGIN /*创建接受查询的临时表 */ create temporary table if not

利用存储过程

存储过程 利用存储过程来消除数据库中冗余的数据CREATE PROCEDURE sp_mytest ASdeclare @pro varchar(50)declare @mm intdeclare wu Cursor for select distinct product from mytestopen wufetch next from wu into @prowhile @@fetch_status=0begin select @mm=sum([cost]) from mytest wher

利用ASP脚本制作异步装载的树形结构(一)(转)——好东东!!

脚本|异步 树形结构是描述层次数据的常见方法.本文介绍的树形结构生成程序主要由一个ASP页面.二个JavaScript函数构成.该树形结构是异步的,也就是说,节点数据仅在必要时才读取,而不是一次性全部发送到客户端. 一.概述 树形结构中所有的节点都必须包含以下属性:本身的ID,父节点的ID,以及本节点的说明(节点文本).本文用到了一个Access数据库Tree.mdb来保存这些节点信息.Tree.mdb包含表tblTree,其定义如下: 字段名称 类型 说明 ElementID 自动编号 节点的

利用存储过程创建表提示权限不足,但是单独创建就可以

问题描述 利用存储过程创建表提示权限不足,但是单独创建就可以 利用存储过程创建表提示权限不足,但是单独创建就可以 create or replace procedure PRC_GZF_BZ_YWSLID(ywslid in verchar2) as L_YWSLID verchar2(30); tpg_gzfspbnum verchar2(30);begin L_YWSLID:=ywslid; tpg_gzfspbnum:='tpg_gzfspb'||L_SLIDID;execute imme

请教GridView利用存储过程分页的问题?谢谢!

问题描述 本人属于菜鸟,跪求GridView利用存储过程分页的代码,最好有详细的说明.使用的后台语言为C#,数据库为SQLServer.不胜感谢! 解决方案 解决方案二: 可以用session也可以用隐藏控件之类的解决方案三: 俄搞错了我还以为是状态保存解决方案四: <asp:LabelID="lblPage"runat="server"Text='<%#"第"+(((GridView)Container.NamingContaine