也许很容易,但我找不到解决方案......
每次用户访问网页时,我都会有一个存储行的表(两者都是整数值)
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
但是这不起作用,因为如果另一个用户已经访问过它,它也会显示用户访问过的页面。
如果我只想要用户没有访问的页面,按其他用户访问过的计数排序,那么有什么好的查询?
谢谢!
答案 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为0
。 having
子句仅允许给定用户从未看过该页面的页面。
答案 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