我在一个页面上有一个文章链接列表,我从mysql获得,我想对它们进行排序,过去10分钟内查看次数最多的文章首先显示在其他文章的顶部。目前我正在尝试的是当有人点击一篇文章时,一个新行被插入到表格中#34; views"列id,时间戳和article_id。我有另一个名为articles的表,其中包含所有文章数据,并且列article_id也匹配views表中的任何文章。
基本上,当单击文章时,它会像这样在视图表中插入行。
id timestamp article_id
1 2018-03-24 16:02:16 12345
2 2018-03-24 16:02:18 54321
3 2018-03-24 16:02:20 12345
4 2018-03-24 16:02:22 12345
5 2018-03-24 16:02:24 23456
6 2018-03-24 16:02:26 23456
7 2018-03-24 16:02:28 54321
8 2018-03-24 16:02:30 23456
9 2018-03-24 16:02:32 12345
10 2018-03-24 16:02:34 34567
11 2018-03-24 16:02:36 34567
12 2018-03-24 16:02:38 54321
13 2018-03-24 16:02:40 12345
14 2018-03-24 16:02:42 12345
15 2018-03-24 16:02:44 12345
当结果显示在页面上时,我希望首先显示点击次数最多,如上所述。在这个示例中,显示的15个文章中有4个文章有视图/点击,因此视图表中有4个文章的多行需要先计算并从最高到最低显示,然后使用其余的正常文章结果没有点击显示正常。如果有意义,可以这样。
Results:
article_1 - article_id 12345 - 6 views
article_2 - article_id 54321 - 3 views
article_3 - article_id 23456 - 3 views
article_4 - article_id 34567 - 2 views
article_5 - article_id 11111 - 0 views
article_6 - article_id 22222 - 0 views
article_7 - article_id 33333 - 0 views
article_8 - article_id 44444 - 0 views
article_9 - article_id 55555 - 0 views
article_10 - article_id 66666 - 0 views
article_11 - article_id 77777 - 0 views
article_12 - article_id 88888 - 0 views
article_13 - article_id 99999 - 0 views
article_14 - article_id 111111 - 0 views
article_15 - article_id 222222 - 0 views
我在网站上获得了相当多的流量,我试图这样做,所以我试图找出执行查询的最佳方式,并尽可能不尝试重大性能。
我不确定如何查询文章表以获取所有文章信息,然后计算并加入视图表以获取在过去10分钟时间段内具有视图的每篇文章的查看次数并按查看的方式对其进行排序文章第一。我一直试图提出一个查询来做到这一点,但它永远不会按照我描述的方式工作。
有没有人有任何想法或建议?感谢。
编辑:
Articles table:
id, article_id, title, description
Views table:
id, timestamp, article_id
答案 0 :(得分:1)
我不确定如何查询文章表以获取所有文章 info然后计算并加入views表以获取视图计数 每篇文章在过去10分钟的时间段内都有观点 首先按照浏览过的文章对它们进行排序。
您的查询需要类似下面的查询。
SELECT
Articles.id
, COUNT(*) AS views
FROM
Articles
LEFT JOIN
Views
ON
Articles.id = Views.article_id
AND
Views.timestamp >= NOW() - INTERVAL 10 MINUTE
GROUP BY
Articles.id
ORDER BY
COUNT(*) DESC
或
SELECT
Articles.id
, COUNT(*) AS views
FROM
Articles
LEFT JOIN
Views
ON
Articles.id = Views.article_id
AND
Views.timestamp >= NOW() - INTERVAL 10 MINUTE
GROUP BY
Articles.id
ORDER BY
CASE
WHEN views >= 1
THEN 1
ELSE 2
END
答案 1 :(得分:0)
在您的情况下,我建议您添加另一个统计信息表,它会计算视图并将其链接到您的文章表,每当用户查看文章时,您都会增加此article_id的视图值。
同样在插入新文章时,它应该将它在stats表中添加为0以获得无视图结果。