【问题标题】:How do I sort articles by Popularity? [closed]如何按人气对文章进行排序? [关闭]
【发布时间】:2017-03-22 22:16:12
【问题描述】:

我有一张包含数千条新闻文章记录的表格。在网站上,有一个新闻列表页面,可以选择无限滚动按受欢迎程度对文章进行排序。该表如下所示:

id | title | description | views | createdAt

确定流行度的关键列是views和createdAt。

我可以实施什么算法/公式来按受欢迎程度对文章进行排序?

目前,我只是按视图降序排序,但这样列表几乎不会一直更新并显示相同的文章。

【问题讨论】:

  • 我认为这与 SO 无关。也许超级用户会更合适?
  • 有多个选项:第一个 - 添加 tablesorter.com/docs os 类似的东西并在前端对表格进行排序。第二 - 将“查询”参数作为链接添加到标题中,如“?createdAt=desc”,读取该参数并将其添加到您的 SQL 调用中,如提到的@WaleedAhmed

标签: php mysql algorithm sorting probability


【解决方案1】:

一种方法可能是按年龄“惩罚”文章。例如,自文章发表以来的每一天,将分数降低 100(或与您的网站流量相匹配的其他任意数字)。这样旧的文章就会慢慢被推出,新的文章就有机会被浏览:

SELECT   *
FROM     articles
ORDER BY views - 100 * DATEDIFF(CURRENT_DATE, createdAt) DESC

【讨论】:

  • 我喜欢这个想法,可以在我的项目中使用它。
  • 为什么不按createdAt=desc 排序?
  • @DainisAbols 而不是views?作为二级排序列?
  • 这是个好主意。但是,我想知道是否有更动态的方法来计算惩罚的乘数,所以我不必硬编码 100 或一些任意数字。
  • @littleibex 我可以考虑的一个稍微更健壮的实现是预先确定您希望一篇文章成为功能多长时间(例如,7 天),然后减去 MAX(views)/time_to_live。这样可以确保观看次数最多的文章的推荐时间不会超过 time_to_live,而其他任何文章的推荐时间都会相应缩短。
【解决方案2】:

简单做,希望能成功:

 order by views,createdAt

【讨论】:

    【解决方案3】:

    你可以多写一列“lastView”

    想法是打印最近流行的项目,而不仅仅是流行的。

    在您的查询中,您可以给出条件: select * from table where created >= 'recentDate1' and lastView >= 'recentDate2' order by views desc;根据您的需要。

    每次刷新时,您都可以通过 jQuery 更改最近的日期,这将为您提供有限数量的结果。您甚至可以减少无限循环/结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2015-02-27
      • 2021-04-11
      相关资源
      最近更新 更多