用于博客文章的SQL select标记

时间:2014-06-29 07:22:35

标签: c# .net sql-server vb.net

我正在创建一个博客,并希望为我的所有帖子显示标签。每个帖子都可以有很多标签。所以我将标签信息存储在一个名为tblTag的表中,我的博客文章存储在tblPost中。

目前,要显示每个帖子的所有帖子和所有标签。我正在使用以下方法:

Select * from tblPost // this to select all post

每篇博文都做一段时间循环:

Select * from tblTag where BlogPostID= ... // this to select tag per post

这项工作。但表现非常糟糕。我不希望服务器运行很多查询。 无论如何要做得更好?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用CROSS APPLY

SELECT p.*, LEFT(ISNULL(t.n,''), LEN(t.n) - 1)
FROM tblPost p
    CROSS APPLY (SELECT it.TagName + ',' FROM tblTag it WHERE it.BlogPostId = p.BlogPostId FOR XML PATH('')) t(n)
WHERE p.BlogPostID = ...

这将为您提供所有标记,以逗号分隔,在单独的列中。

答案 1 :(得分:0)

您可以使用SQL查询来获取帖子信息(标题,日期等),以及与此帖子相关联的所有标记行。

SELECT p.*, t.* FROM tblPost p
left join tblTag t on t.BlogPostID = p.id

完成上述操作后,您可以遍历数据集中的行。