C# 30天内的热门话题

C# 30天内的热门话题,c#,sql,asp.net,asp.net-mvc,C#,Sql,Asp.net,Asp.net Mvc,我的DB表中有超过10k个主题,我在会话基础上计算每个主题的页面浏览量,并且只存储一个视图/每个主题/每个用户(会话时间24小时) 现在我想在过去30天内获得热门话题,这意味着我想在过去30天的页面浏览量的基础上获得热门话题。我只需要一个小小的方向,关于如何实现这一点。谢谢您已经在数据库中存储了视图,这很好。您还需要存储创建主题的日期 如果您已经这样做了,您可以编写这样的查询(我不知道您的列名等): 它返回过去30天内创建的所有主题,首先返回大多数已查看的主题 您不想将所有一万条记录加载到内存中

我的DB表中有超过10k个主题,我在会话基础上计算每个主题的页面浏览量,并且只存储一个视图/每个主题/每个用户(会话时间24小时)


现在我想在过去30天内获得热门话题,这意味着我想在过去30天的页面浏览量的基础上获得热门话题。我只需要一个小小的方向,关于如何实现这一点。谢谢

您已经在数据库中存储了视图,这很好。您还需要存储创建主题的日期

如果您已经这样做了,您可以编写这样的查询(我不知道您的列名等):

它返回过去30天内创建的所有主题,首先返回大多数已查看的主题


您不想将所有一万条记录加载到内存中,因此,请确保实现分页。

您已经将视图存储在数据库中,这很好。您还需要存储创建主题的日期

如果您已经这样做了,您可以编写这样的查询(我不知道您的列名等):

它返回过去30天内创建的所有主题,首先返回大多数已查看的主题


您不想将所有一万条记录加载到内存中,因此,请确保实现分页。

您已经将视图存储在数据库中,这很好。您还需要存储创建主题的日期

如果您已经这样做了,您可以编写这样的查询(我不知道您的列名等):

它返回过去30天内创建的所有主题,首先返回大多数已查看的主题


您不想将所有一万条记录加载到内存中,因此,请确保实现分页。

您已经将视图存储在数据库中,这很好。您还需要存储创建主题的日期

如果您已经这样做了,您可以编写这样的查询(我不知道您的列名等):

它返回过去30天内创建的所有主题,首先返回大多数已查看的主题


您不想将所有一万条记录加载到内存中,因此,请确保实现分页。

如果您想真正适应最近的视图,则需要将其分为主题表和主题视图表。在当前的表格结构中,不知道一个视图最近有多近——因此,如果你在一年中的第10周有一个主题高峰,它可能会在很长一段时间内保持在热门主题列表的第一位(因为“视图”列一直是累积的)

现在,您可以在用户每次点击页面时检查您是否已经为他们记录了“TopicView”。当您想查看热门主题时,可以执行:

DECLARE @maxResults INT = 100  --the maximum number of results we will show
DECLARE @hotTopicViewDays INT = 30 --how recent we want to see hot topic activity
DECLARE @hotTopicViewLimit INT = 300 --what amount of views we consider hot


SELECT TOP (@maxResults)
    T.[Id],
    T.[Topic],
    COUNT(TV.[ViewID]) [Views]
FROM [Topic] T
    JOIN [TopicView] TV
    ON T.[Id] = TV.[TopicId]
WHERE TV.ViewDate >= DATEADD(DAY, -(@hotTopicViewDays), GETDATE())
GROUP BY T.[Id],
    T.[Topic]
HAVING COUNT(TV.[ViewId]) >= @hotTopicViewLimit
这是非常可扩展的,允许您配置:

  • 您希望使用@maxResults返回多少个结果
  • 使用@hotTopicViewDays将最近的视图纳入“热门话题”活动需要考虑的因素
  • 用“HoTopPopeVIEW限制”来讨论一个主题“热”需要多少活动?
    如果有任何问题或任何人认为这种方法有问题,请告诉我。

    如果您想真正适应最近的视图,需要将主题表和TopicView表分开。在当前的表格结构中,不知道一个视图最近有多近——因此,如果你在一年中的第10周有一个主题高峰,它可能会在很长一段时间内保持在热门主题列表的第一位(因为“视图”列一直是累积的)

    现在,您可以在用户每次点击页面时检查您是否已经为他们记录了“TopicView”。当您想查看热门主题时,可以执行:

    DECLARE @maxResults INT = 100  --the maximum number of results we will show
    DECLARE @hotTopicViewDays INT = 30 --how recent we want to see hot topic activity
    DECLARE @hotTopicViewLimit INT = 300 --what amount of views we consider hot
    
    
    SELECT TOP (@maxResults)
        T.[Id],
        T.[Topic],
        COUNT(TV.[ViewID]) [Views]
    FROM [Topic] T
        JOIN [TopicView] TV
        ON T.[Id] = TV.[TopicId]
    WHERE TV.ViewDate >= DATEADD(DAY, -(@hotTopicViewDays), GETDATE())
    GROUP BY T.[Id],
        T.[Topic]
    HAVING COUNT(TV.[ViewId]) >= @hotTopicViewLimit
    
    这是非常可扩展的,允许您配置:

  • 您希望使用@maxResults返回多少个结果
  • 使用@hotTopicViewDays将最近的视图纳入“热门话题”活动需要考虑的因素
  • 用“HoTopPopeVIEW限制”来讨论一个主题“热”需要多少活动?
    如果有任何问题或任何人认为这种方法有问题,请告诉我。

    如果您想真正适应最近的视图,需要将主题表和TopicView表分开。在当前的表格结构中,不知道一个视图最近有多近——因此,如果你在一年中的第10周有一个主题高峰,它可能会在很长一段时间内保持在热门主题列表的第一位(因为“视图”列一直是累积的)

    现在,您可以在用户每次点击页面时检查您是否已经为他们记录了“TopicView”。当您想查看热门主题时,可以执行:

    DECLARE @maxResults INT = 100  --the maximum number of results we will show
    DECLARE @hotTopicViewDays INT = 30 --how recent we want to see hot topic activity
    DECLARE @hotTopicViewLimit INT = 300 --what amount of views we consider hot
    
    
    SELECT TOP (@maxResults)
        T.[Id],
        T.[Topic],
        COUNT(TV.[ViewID]) [Views]
    FROM [Topic] T
        JOIN [TopicView] TV
        ON T.[Id] = TV.[TopicId]
    WHERE TV.ViewDate >= DATEADD(DAY, -(@hotTopicViewDays), GETDATE())
    GROUP BY T.[Id],
        T.[Topic]
    HAVING COUNT(TV.[ViewId]) >= @hotTopicViewLimit
    
    这是非常可扩展的,允许您配置:

  • 您希望使用@maxResults返回多少个结果
  • 使用@hotTopicViewDays将最近的视图纳入“热门话题”活动需要考虑的因素
  • 用“HoTopPopeVIEW限制”来讨论一个主题“热”需要多少活动?
    如果有任何问题或任何人认为这种方法有问题,请告诉我。

    如果您想真正适应最近的视图,需要将主题表和TopicView表分开。在当前的表格结构中,不知道一个视图最近有多近——因此,如果你在一年中的第10周有一个主题高峰,它可能会在很长一段时间内保持在热门主题列表的第一位(因为“视图”列一直是累积的)

    现在,您可以在用户每次点击页面时检查您是否已经为他们记录了“TopicView”。当您想查看热门主题时,可以执行:

    DECLARE @maxResults INT = 100  --the maximum number of results we will show
    DECLARE @hotTopicViewDays INT = 30 --how recent we want to see hot topic activity
    DECLARE @hotTopicViewLimit INT = 300 --what amount of views we consider hot
    
    
    SELECT TOP (@maxResults)
        T.[Id],
        T.[Topic],
        COUNT(TV.[ViewID]) [Views]
    FROM [Topic] T
        JOIN [TopicView] TV
        ON T.[Id] = TV.[TopicId]
    WHERE TV.ViewDate >= DATEADD(DAY, -(@hotTopicViewDays), GETDATE())
    GROUP BY T.[Id],
        T.[Topic]
    HAVING COUNT(TV.[ViewId]) >= @hotTopicViewLimit
    
    这是非常可扩展的,允许您配置:

  • 您希望使用@maxResults返回多少个结果
  • 使用@hotTopicViewDays将最近的视图纳入“热门话题”活动需要考虑的因素
  • 用“HoTopPopeVIEW限制”来讨论一个主题“热”需要多少活动?
    如果有任何问题,或者有人认为这种方法有问题,请告诉我。

    您想用SQL还是C#来执行此操作?另外,我们需要知道你们的桌子是什么