【发布时间】:2018-02-03 00:29:36
【问题描述】:
长话短说,我有这个网站,其中“父母”级别的 cmets 存储在一个单独的表中,而不是他们的回复,称为“孩子” cmets。
为了生成所有最近评论的列表,我一直在做这样的事情:
SELECT
TOP 10
PC.ParentCommentText,
PC.ParentCommentID,
PC.ParentCommentTimeStamp
FROM
ParentComments AS PC
我们称之为 Query1。
Query2 相同:
SELECT
TOP 10
CC.ChildCommentText,
CC.ChildCommentID,
CC.ChildCommentTimeStamp
FROM
ChildComments AS CC
然后我使用联合并查询查询,这样我就可以一次遍历所有结果并显示最近的混合列表。
SELECT * FROM Query1
UNION
SELECT * FROM Query2
ORDER BY ParentCommentTimeStamp DESC
我的问题从前两个查询开始——我只能从任一表返回某个数字才能开始。因此,如果某个线程跑掉并成为一个大讨论,则“子”cmets 的所有插槽都会被填满,您可能仍会看到几小时或几天前的“父”cmets,尽管它们不在最近。
我已经有一段时间没有做任何需要深入了解 SQL 的事情了。我知道有一种方法可以选择 Parent 和 Child cmets 作为一个,并且只需获取 __ 个结果,不管它们来自哪个表。
帮助?
【问题讨论】:
-
注意 - 这也被标记为 Coldfusion。那是我为此努力的服务器端语言,我对不纯粹是 SQL 的解决方案持开放态度。虽然这是首选。
-
你能展示一些示例数据和预期的结果吗?
-
我只想合并两个表的结果,而不是将自己限制为例如每个表 10 个。我想要任何一个表中的所有结果,在一个查询对象中,只是按它们的时间戳排序。因此,如果我想要 20 个最近的 cmets,我可能会得到 18 个 Child cmets 和 2 个 Parents。现在,无论如何,我都会得到最近的 10 个。
-
如何将子评论与其父评论关联起来?
-
子评论表有一个父 ID 列,在发表评论时填写。
标签: sql sql-server sql-server-2012 coldfusion