【问题标题】:SQL select tag for blog post博客文章的 SQL 选择标签
【发布时间】:2014-06-29 07:22:35
【问题描述】:

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

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

Select * from tblPost // this to select all post

并为每篇博文做一个 while 循环:

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

这项工作。但是性能很差。我不希望服务器运行大量查询。 反正做的比较好?

【问题讨论】:

  • 你能描述一下dbo.tblTag的结构(列名)吗?
  • “无论如何要做得更好”。做什么?获取所有帖子及其标签?您可以使用 JOIN 在单个查询中获取所有这些信息...

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


【解决方案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 = ...

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

【讨论】:

  • 这适用于 SQL-server-2005 或 SQL-server-2008 吗?
  • @monocular 是的,它应该适用于 2005 年和 2008 年。但是尝试在 SSMS 中运行它以确保...
  • @monocular 如果此答案解决了您的问题,请使用绿色复选标记将其标记为答案...
【解决方案2】:

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

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

完成上述操作后,您可以循环浏览数据集中的行。

【讨论】:

  • 但是一篇文章可能有很多标签。如何在一个帖子行中加入多个标签行并用“,”分隔?例如:帖子#1,标签:a,b,c
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2021-12-03
  • 2020-10-21
  • 1970-01-01
相关资源
最近更新 更多