问一个查询场景的sql应该怎么写
背景:
会有一张表记录每个用户浏览过一些内容(带id)
需求
现在要计算出每篇文章被看哪些人看过,然后这些人又看了其他的哪些文章,浏览次数取top
现在要计算那些看过同一篇内容的人中浏览次数最多的几篇内容,大概sql是这样
select * from
(
select contentId,count(*) as pv
from t
where uid in (
select uid
from t
where t.contentid = ?
)
group by contentId
)order by pv desc
limit n
上面的sql只能计算某一条内容的数据
我现在需要计算每篇文章,应该怎么弄呢
可能我表达的不是很明确
我的表结构假设是【contentID | uID】我以一个内容举例,一个内容会对应一个用户集合,代表这些用户浏览过该内容,我先是查找这个用户集合,然后这些用户中每个用户又浏览了其他的内容(也是利用那张初始表),我想查询出来的这些内容做一个计算,计算出出现次数最高的那几条内容,代表和最初那条内容关联度最高的内容列表。上面的逻辑过程是对一个单条内容的计算,我现在想对每条内容计算同样的数据,应该如何处理
逻辑流程图差不多如下图
库扛不住,得上大数据方案,不能用线上mysql。
如果非要这么做,酱紫。(我没测过)
如果排名后只取前3条数据,就外面还需要套一层,比较复杂