如何使用 SQL 查询找出哪些用户阅读了特定文章以及这些用户最常浏览的其它文章?

如何使用 sql 查询找出哪些用户阅读了特定文章以及这些用户最常浏览的其它文章?

一个 sql 咨询

问题:

如何编写 sql 查询,以确定哪些用户查看了特定文章,以及这些用户查看过的其他最常浏览的文章?

背景:

存在一张记录每个用户浏览的文章(含 id)的表格。需求如下:

  1. 计算每篇文章被哪些用户查看。
  2. 找出这些用户浏览过的其他文章中最常浏览的几篇文章。
  3. 按浏览次数降序排列结果。

解决方案:

方法 1:异步任务

对于大量数据,使用异步任务定时统计每个文章关联文章的浏览次数是一个更好的选择。这可以避免过度加载数据库。

方法 2:sql 查询

如果必须使用 sql 一次性解决所有问题,可以使用如下查询:

-- 页面访问日志表
CREATE TABLE `read_log` (
  `content_id` int,
  `uid` int
);

-- 每个页面的访问用户访问过的页面在这些用户下的访问次数统计
SELECT
  l.content_id AS l_content_id, -- 每个需要统计的页面ID,
  --      l.uid_list    l.uid_list AS '访问过 每个需要统计的页面ID 的用户组',
  t.content_id AS t_content_id, -- 访问过 每个需要统计的页面ID 的用户组 仿问过的需要统计pv的页面ID
  COUNT(t.uid) AS pv
FROM read_log t
JOIN (
  SELECT
    content_id,
    GROUP_CONCAT(DISTINCT uid, '') AS uid_list
  FROM read_log
  GROUP BY
    content_id
) l
ON FIND_IN_SET(t.uid, l.uid_list)
GROUP BY
  l.content_id,
  t.content_id
ORDER BY
  l.content_id,
  pv DESC;

注意:如果需要在排名后只获取前 n 条数据,请使用额外的嵌套查询。

以上就是如何使用 SQL 查询找出哪些用户阅读了特定文章以及这些用户最常浏览的其它文章?的详细内容,更多请关注其它相关文章!