Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 博客文章的SQL选择标记_C#_.net_Sql Server_Vb.net - Fatal编程技术网

C# 博客文章的SQL选择标记

C# 博客文章的SQL选择标记,c#,.net,sql-server,vb.net,C#,.net,Sql Server,Vb.net,我正在创建一个博客,希望显示我所有帖子的标签。每个帖子可以有很多标签。所以我将标签信息存储在一个名为tblTag的表中,我的博客文章存储在tblPost中 当前,显示所有帖子和每个帖子的所有标签。我使用以下方法: Select * from tblPost // this to select all post 并对每个博客帖子执行while循环: Select * from tblTag where BlogPostID= ... // this to select tag per post

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

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

Select * from tblPost // this to select all post
并对每个博客帖子执行while循环:

Select * from tblTag where BlogPostID= ... // this to select tag per post
这项工作。但是性能很差。我不希望服务器运行大量查询。
无论如何,做得更好?

是的,您可以使用
交叉应用

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查询获取帖子信息(标题、日期等),以及与此帖子相关的所有标记行

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

一旦获得了上述内容,就可以循环遍历数据集中的行

这是否适用于SQL-server-2005或SQL-server-2008?@monocular是的,它应该适用于2005和2008。但是,请尝试在SSMS中运行它,以确保…@monocular如果此答案解决了您的问题,请使用绿色复选标记将其标记为答案…您能否描述
dbo.tblTag
的结构(列名)?“无论如何都要做得更好”。做什么?获取所有帖子及其标签?您可以使用JOIN在单个查询中获取所有信息……但一篇文章可能有meny标记。如何将meny标记行连接到一个post行中并用“,”分隔?例如:Post#1,tag:a、b、c