sql server:获取多条记录,每条记录包含多个子记录

时间:2013-10-03 19:37:49

标签: c# sql-server

我有2个表,第一个包含帖子,第二个包含帖子的评论

Posts
-------
[ID] int
{Text] nvarchar(max)
.... (some other columns...)

Comments
--------
[ID] int
[PostID] int
[Comment] Nvarchar(1024)
.... (some other columns)

我想加载每篇文章的前20个帖子和前10个评论。问题是因为我要在我的页面上显示帖子,我需要在帖子后对每个帖子发表评论。

任何建议?

2 个答案:

答案 0 :(得分:1)

这将帮助您获得一次旅行所需的所有数据。你的DataAdapter.Fill命令应该是这样的:

SELECT TOP 20 * FROM Posts WHERE ...

然后在同一个命令中,用分号;分隔,得到第二个SQL,这将导致在DataSet中添加第二个表。

SELECT * 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER(PARTITION BY PostID ORDER BY ID desc) RowNum 
     FROM 
         Comments 
     WHERE 
         PostID IN (SELECT TOP 20 ID FROM Posts WHERE ...)
    ) tmp 
WHERE 
    RowNum <= 10

此SQL将为您提供上面要求的所有帖子的评论,但只是每个PostID的最后10个评论。

请注意

SELECT TOP 20 ID FROM Posts WHERE ...

应该是第一个SQL语句中的确切SQL,除了单个返回字段是ID列。

填充数据集后,将其保存以供日后使用,以便在记录更改(选择发布)时,您可以获取已经为您的评论本地化的数据

抱歉这是在VB中

Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})

希望这会有所帮助。它应该让你至少指向正确的方向。

答案 1 :(得分:0)

使用包含两个与关系相关联的数据表的数据集。您可以通过Visual Studio设计器实现这一目标。您还可以使用较新的实体框架。或者,您可以选择所有帖子,然后在循环浏览帖子时,发出SQL语句以从DB中获取注释(相当慢)。您也可以一次获取所有注释,然后在循环浏览帖子时,使用嵌套循环过滤掉相应的注释。您还可以使用LINQ查询按帖子对注释进行分组。这种特殊的猫可以通过许多方式剥皮: - )