【发布时间】:2019-06-03 12:25:28
【问题描述】:
我正在尝试获取最新的热门帖子,这些帖子应该是具有最高查看次数的帖子,为此我正在使用以下 MySQL 查询:
SELECT
p.id,
p.date,
COUNT(v.post_id) views
FROM
posts p
JOIN posts_views v ON v.post_id = p.id
GROUP BY v.post_id
ORDER BY views DESC, p.date DESC
posts.date 是 Post 提交日期。
这个查询应该是获取最新(最高查看)的帖子,但不幸的是,我从这个查询中得到的结果总是帖子之间最高的 Views,不管帖子有多旧查看次数较多。
我需要查询以获取按查看次数排序的一个月内添加的帖子,然后根据每个帖子的提交日期重新排序。该列表应首先显示查看次数较多但提交日期较新的帖子。一个案例场景是一个帖子,它不在视图数量之上,因为它是一个新帖子,但具有挑战性的视图数量。 ,如:
ORDER ID VIEWS DATE
1 23 55 2018/12/01
2 45 77 2018/07/07
3 14 45 2018/06/05
posts 表结构:
id title date
65 Lorem ipsum dolor sit amet 2 1543346735
67 Lorem ipsum dolor sit amet 3 1543346256
66 Lorem ipsum dolor sit amet 4 1543346253
68 Lorem ipsum dolor sit amet 5 1543376617
posts_views 表结构:
id post_id ip date
1 65 44.55.36.13 1543346735
5 67 46.54.36.51 1543347256
4 66 43.55.36.51 1543347253
6 68 48.66.36.01 1543377617
【问题讨论】:
-
所以您只想要 x 个结果,即观看次数最多的结果,但按日期顺序排列?或者究竟是什么?如果是这样,那么按视图排序,限制,做成子查询并按日期排序
-
但是“最高而新”的确切定义是什么?
-
如果可能的话,我需要它在一个查询中。我需要查询以获得最新提交的帖子中浏览量最高的帖子。
-
您必须定义“最新”。它需要是您可以具体定义的东西。上个星期?上个月?去年?根据年龄来衡量观看次数?首先找出一个数学或逻辑公式来定义它应该如何确定
-
我的意思是最近的“上周”,是的,我应该根据帖子的年龄来衡量观看次数吗?
标签: mysql date join sql-order-by having-clause