我正在创建一个博客,并希望为我的所有帖子显示标签。每个帖子都可以有很多标签。所以我将标签信息存储在一个名为tblTag的表中,我的博客文章存储在tblPost中。
目前,要显示每个帖子的所有帖子和所有标签。我正在使用以下方法:
Select * from tblPost // this to select all post
每篇博文都做一段时间循环:
Select * from tblTag where BlogPostID= ... // this to select tag per post
这项工作。但表现非常糟糕。我不希望服务器运行很多查询。 无论如何要做得更好?
答案 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
完成上述操作后,您可以遍历数据集中的行。