【发布时间】:2015-02-19 16:24:58
【问题描述】:
我不知道从哪里开始。我正在开发一个论坛,需要一个热门话题列表。它的工作方式是我需要一个主题列表,并按自某个日期时间以来回复该主题的消息数量排序。但只有唯一的消息(所以如果一个用户回复一个主题 100 次,而另一个主题有 2 个由 2 个不同的用户 ID 回复,那么第二个更高)
我猜它需要检索主题,然后对链接到该主题 id 的消息进行计数,这些消息按消息的用户 ID 分组(因此,如果用户对某个主题回复 100 次,它只计为 1),然后排序按此计数的主题。
这是我猜需要的表格
@lastvisit 将包含DateTime,因此它的所有主题消息都在此日期时间之后。所以我现在可以称之为日期时间 - 2 小时将是过去 2 小时的热门话题
Topics表
TopicId
TopicTitle
Active (has to be active = True)
Messages表
TopicId
MessageCreationDate
UserId
Active (has to be active = 1)
不知道从哪里开始,我需要学习的是 SQL
根据 lc 的回答,我想出了这个作为基础
SELECT
T.TopicTitle, T.TopicId, UniqueUserCount
FROM
Topics AS T
OUTER APPLY
(SELECT
COUNT(distinct M.UserId) as UniqueUserCount, M.TopicId
FROM
Messages AS M
WHERE
M.TopicId = T.TopicId
GROUP BY M.TopicId) AS m
GROUP BY
T.TopicId, TopicTitle, UniqueUserCount
ORDER BY
UniqueUserCount DESC
【问题讨论】:
-
因此您要计算每个评论的排序权重,然后根据该权重对数据进行排序。这是纯粹的业务逻辑,最好在代码端做。
标签: sql-server