0

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

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

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

我想加载前 20 个帖子和每个帖子的前 10 个评论。问题是因为我要在我的页面上显示帖子,所以我需要在帖子之后对每个帖子进行评论。

有什么建议么?

4

2 回答 2

1

这将帮助您在 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})

希望这可以帮助。它至少应该让你指出正确的方向。

于 2013-10-03T20:38:26.793 回答
0

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

于 2013-10-03T19:48:33.070 回答