查询用户没有访问的页面

时间:2014-07-24 11:15:50

标签: mysql

也许很容易,但我找不到解决方案......

每次用户访问网页时,我都会有一个存储行的表(两者都是整数值)

user_id  I  page_id
1        I  1
2        I  1
1        I  2
1        I  3
(...)

我想获取用户尚未访问的所有页面的列表,按其他用户访问它们的频率排序。

我从

开始
SELECT page_id, COUNT(*) as anz FROM clicks WHERE user_id!=XXXX GROUP BY page_id ORDER BY anz DESC 

但是这不起作用,因为如果另一个用户已经访问过它,它也会显示用户访问过的页面。

如果我只想要用户没有访问的页面,按其他用户访问过的计数排序,那么有什么好的查询?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用一些额外的逻辑进行聚合:

SELECT page_id, sum(user_id <> XXXX) as anz
FROM clicks
GROUP BY page_id
HAVING sum(user_id = XXXX) = 0
ORDER BY anz DESC;

sum()计算已查看该页面的其他用户的数量。 MySQL将布尔值视为整数,其中true为1,false为0having子句仅允许给定用户从未看过该页面的页面。

答案 1 :(得分:0)

试试这个:

SELECT t1.page_id, COUNT(t2.page_id) as anz 
FROM clicks as t1
LEFT JOIN clicks as t2 on t1.page_id=t2.page_id
WHERE t1.page_id not in(SELECT DISTINCT page_id FROM clicks WHERE user_id=XXXX) 
GROUP BY t2.page_id 
ORDER BY anz DESC