关闭

树形结构的数据库实现,存储过程实现添加删除查询功能

701人阅读 评论(0) 收藏 举报
分类:
USE [JPKCDB]
GO
/****** Object:  StoredProcedure [dbo].[BbsDelete]    Script Date: 2015/11/19 23:32:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsDelete]

    @ID INT 
)   
AS 
    DECLARE @LID AS INT, @RID AS INT, @WID AS INT, @DID AS INT, @NUM as int
set @NUM=0
    SET @DID = 0  
    SELECT @DID = ID, @LID = LID, @RID = RID, @WID = RID - LID + 1 FROM Bbs WHERE ID = @ID  
    IF @DID != 0  
    BEGIN 
select @NUM=@WID/2
        DELETE FROM Bbs WHERE LID BETWEEN @LID AND @RID

        UPDATE Bbs SET RID = RID - @WID WHERE RID > @RID
        UPDATE Bbs SET LID = LID - @WID WHERE LID > @RID  
update Bbs set ID=ID-@NUM where ID>@ID
update Bbs set FID=FID-@NUM where FID>@ID


    END 
    SELECT @DID  






USE [JPKCDB]
GO
/****** Object:  StoredProcedure [dbo].[BbsInsert]    Script Date: 2015/11/19 23:32:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER   PROCEDURE [dbo].[BbsInsert]  
(  
    @Root INT,  
@tieName nvarchar(100),
@bbsTitle nvarchar(50),
@detail nvarchar(2000),
@pubTime nchar(19),
@publisherId INT,
@tp INT,
@did INT,
@state INT
)  
AS 
    DECLARE @LID AS INT,@RID AS INT,@NID AS INT,@Tree AS INT,@NkID AS INT,@CNT AS INT

SET @LID=0
    SET @RID = 1  
    SET @NID = 0  
    SET @Tree = 0  
SET @CNT=0



-- 表中为空,没有树根节点,则先插入树根节点
set @nkid=(select count(*)+1 from Bbs)
IF (@nkid=1)
BEGIN
INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state)      VALUES (0,1,2,0,-1,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)  
END
ELSE
BEGIN


--在根节点下插入



SELECT @LID=LID,@RID = RID, @Tree = Tree + 1  
FROM Bbs WHERE ID = @Root  


SET @NID=@ROOT+(@RID-@LID+1)/2

UPDATE  Bbs  SET RID = RID + 2 WHERE RID  >= @RID 
UPDATE  Bbs  SET LID = LID + 2 WHERE LID > @RID  
UPDATE  Bbs  SET ID = ID + 1 WHERE LID > @RID
UPDATE  Bbs  SET fID = fID + 1 WHERE fid> @root AND RID>@RID


INSERT INTO Bbs(id,LID,RID,Tree,fid,tieName,bbsTitle,detail,pubTime,publisherId,tp,did,state)      VALUES (@NID,@RID,@RID + 1,@Tree,@root,@tieName,@bbsTitle,@detail,@pubTime,@publisherId,@tp,@did,@state)  

SET @NkID = SCOPE_IDENTITY()  

SELECT @NkID  


END





USE [JPKCDB]
GO
/****** Object:  StoredProcedure [dbo].[BbsSelect]    Script Date: 2015/11/19 23:32:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BbsSelect]
-- Add the parameters for the stored procedure here
@Root INT,
@Tree INT
AS
BEGIN


SELECT *
FROM Bbs AS Z,Bbs AS P
WHERE P.ID=@Root
AND Z.LID>=P.LID AND Z.RID <=P.RID
AND (@Tree = 0 OR Z.Tree<=P.Tree+@Tree)
ORDER BY Z.LID ASC
END





0
0
查看评论

如何将数据库中存的树转化为树形列表(以easyui的tree为例)

很多时候,我们会把一棵树存放到数据库中,当前台需要展示一个树形列表时,将这棵树读取出来并显示,这个过程是怎么实现的呢? 这篇文章是以构造一棵easyui前台框架的一个树形列表为例,后台框架是spring MVC+JPA。 首先看一下数据库中这颗树是怎么存的: 树的结构一目了然,这是一棵...
  • u012116457
  • u012116457
  • 2015-05-22 09:20
  • 10410

树形结构的数据如何保存到关系型的数据库

需求: 文档型数据,结构是树形的,如图: 想要读取生成树形结构、添加子节点、查找修改数据的代价最小。 看知乎上牛人的答案: 一般比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书) Adjacency List:每一条记录存parent_id Pa...
  • jim8757
  • jim8757
  • 2016-08-31 15:41
  • 3817

sql删除树节点 及其子节点的全部(存储过程,游标,递归)

删除父节点及父节点之下的全部节点 比如删除节点为3,将递归删除其下的全部节点6,11,12     表里面需要创建ID ,PID TID用处以后对树的复制操作 表格式如图所示: PID用于存放节点的值 name存放内容 ID自动增长 0节点存在ID为1的节点 1节点下存在ID为...
  • bianjing40
  • bianjing40
  • 2015-06-20 00:47
  • 1577

递归删除树形结构的所有子节点(java和mysql实现)

1.业务场景有如下树形结构: +—0 +—1 +—2 +—4 +—5 +—3 如果如果删除某个父节点,则其子节点,已经子节点的子节点,以此类推,需要全部删...
  • sinat_26342009
  • sinat_26342009
  • 2016-07-14 11:02
  • 5580

Java递归实现删除树形结构的任一节点

要删除树形结构的节点,需考虑两件事: 1.要删除的节点若包含子节点,则需删除该节点及其所有子节点; 2.如果要删除的节点的父节点不包含除该节点外的其它子节点,则该父节点变为叶子; 另外,这两件事需要包含在同一事务中,具有原子性。 下面,先来考虑第一件事: 要遍历树形结构中的一个节点及其子节...
  • memories5977
  • memories5977
  • 2015-11-07 16:30
  • 1867

利用MySQL的表实现树的构建以及优化

利用MySQL的表实现树的构建 数据结构表结构介绍: 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品,省份存储,分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能...
  • u013983450
  • u013983450
  • 2016-08-11 10:49
  • 3075

mysql中递归树状结构

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。    ...
  • Sky786905664
  • Sky786905664
  • 2016-10-06 09:42
  • 4956

树形结构 数据库表设计

转载:逻辑数据库设计 - 单纯的树(递归关系数据) 相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。   这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。   对...
  • tiantiandjava
  • tiantiandjava
  • 2015-04-30 09:46
  • 35227

sql 存储过程 层次 树形结构

用SQL存储过程生成树形结构数据表。建立表:create table table_NewsClass(NewsclassName varchar(50), NewsClassID int,NewsClassParentID int)insert into table_NewsClassse...
  • daonidedie
  • daonidedie
  • 2008-01-14 16:57
  • 622

SQL图示树形数据表查询存储过程

SQL图示树形数据表查询存储过程1、引言     所谓树形层次数据表 ,通常指的是通过两个父子ID字段来标识记录行之间的层次关系,即在关系数据中实现树形数据结构。如SQL SERVER数据库Northwind中表Employees, 用Em...
  • xqzl
  • xqzl
  • 2008-04-25 11:49
  • 1575
    个人资料
    • 访问:87535次
    • 积分:2324
    • 等级:
    • 排名:第19001名
    • 原创:125篇
    • 转载:3篇
    • 译文:16篇
    • 评论:9条
    博客专栏
    github

    文章:6篇

    阅读:3088
    最新评论