我正在尝试获取最新的趋势帖子,这些帖子应该是具有最多视图的帖子,为此,我使用以下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` 是提交后的日期。
这个查询应该是获取最新(最高浏览量)的帖子,但是不幸的是,我从这个查询得到的结果总是帖子之间的最高浏览量,不管帖子的浏览量多大。
我需要这个查询来获取在一个月内添加的帖子,这些帖子按视图的数量排序,然后根据每个帖子的提交日期重新排序。这个列表应该把浏览量较大但提交日期较新的帖子放在第一位。一种情况是,如果一篇文章的浏览量不在第一位,因为它是一篇新文章,但浏览量却很有挑战性,例如:
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\u视图表结构:
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
2条答案
按热度按时间vaj7vani1#
在所有的评论最终提供了一个更明确的你想要什么之后,我将首先只获得那些在你首先关心的时间段内的post id。这个独特的列表可以加入到主“posts”表中,这样您就不会浪费时间去计算在几周、几个月甚至几年内没有活动的id的记录了。。
另外,由于您没有为post\u views表提供任何表结构,因此我必须假设条目具有日期/时间。。。您可以有一篇文章,但有30个人在几天内查看,所以您可能会在该表上有一个日期——假设这样的列名
对于将来,发布对阐明您的观点至关重要的表结构也很好。如果您有50列,您可能只需要显示3-4个与查询相关联的列,只显示重要的列就可以得到您的答案。
svujldwt2#
如果您希望输出上周提交的文章列表及其视图计数(按提交日期降序排列),则:
您可能希望通过添加
LIMIT
子句,例如LIMIT 50
前50排。另一种选择是只显示至少有n个视图的帖子,其中
HAVING
条款: