文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在数据库中将字表中的多行合并到一列中

在数据库中将字表中的多行合并到一列中

时间:2010-10-15  来源:oec2003

假设有一个文章表Post和一个评论表Comments,可以对文章进行多次评论,现在希望在对Post表查询时能将Post的所有评论内容组合到一个字段中显示。

首先创建表Post和Comments

create table Post
(
    [PostID] int identity(1,1) primary key not null,
    [Title] nvarchar(50),
    [Content] text,
    [CreateDate] datetime default getdate()    
)

create table Comments
(
    [CommentID] int identity(1,1) primary key not null,
    [PostID] int,
    [Content] text,
    [CreateDate] datetime default getdate()
)

给这两个表添加一些测试数据

insert into Post select '钓鱼岛是中国的吗?','钓鱼岛是中国的',getdate()
insert into Comments select 1,'绝对是',getdate()
insert into Comments select 1,'必须是的',getdate()
insert into Comments select 1,'谁说不是呢',getdate()

评论内容的组合使用一个函数来实现,在函数中使用游标去遍历给定PostID的所有评论然后进行拼接,函数代码如下:

create  FUNCTION fn_GetAllComments(@PostID int)
RETURNS NVARCHAR(4000)
AS
BEGIN
    DECLARE @result VARCHAR(4000)
    SET @result=''
    DECLARE getAllComments CURSOR
    FOR
        select CommentID from Comments where PostID=@PostID
    OPEN getAllComments
    DECLARE @ID SYSNAME
    FETCH  FROM getAllComments INTO @ID
    WHILE @@fetch_status=0
    BEGIN
        SET @result=@result+(select convert(nvarchar(20),CreateDate,120) 
                                from Comments where CommentID=@ID)+':'+
                            (select cast([Content] as nvarchar(4000)) 
                                from Comments where CommentID=@ID)+';'
        FETCH  FROM getAllComments INTO @ID
    END
    CLOSE getAllComments
    SET @result= substring(@result,0,len(@result))
    DEALLOCATE getAllComments
    RETURN @result
END

现在写SQL语句来测试一下结果

select 
    Title,[Content],CreateDate,dbo.fn_GetAllComments(PostID) as AllComments
from Post

查询结果如下:


作者: oec2003(水杯)
出处: http://oec2003.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则 保留追究法律责任的权利。
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载