mysql - 查询以获取用户尚未看到的最受欢迎的项目

时间:2012-02-07 05:58:30

标签: mysql

获取最受欢迎的商品相对容易。但是,我们假设我有一个包含两列的表:item_idviewer_id

给定一个viewer_id,我想获取前X个item_id行,这些行已经被查看过了很多次并且没有被给定的viewer_id查看过。例如:

item_id | viewer_id
   A    |    1
   A    |    3
   C    |    2
   C    |    3
   C    |    4
   D    |    5

获取观众2看不到的最受欢迎的项目应该返回A,D。

有什么好办法可以解决这个问题?

3 个答案:

答案 0 :(得分:0)

下面的内容应该有效:

SELECT t.item_id, COUNT(t.viewer_id) AS view_count FROM table t 
WHERE t.item_id NOT IN (SELECT DISTINCT item_id FROM table t2 WHERE viewer_id = your_viewer_id)
GROUP BY item_id
ORDER BY view_count DESC

答案 1 :(得分:0)

试试这个:

select item_id, count(*) as timesViewed from t2
where item_id not in (
    select distinct t1.item_id from t1
    where viewer_id = 2
)
group by item_id
order by timesViewed desc

工作example

答案 2 :(得分:0)

根据我的理解,你不仅要列出它们,而且要求从大多数到最不受欢迎;这应该有效。

SELECT item_id 
FROM table_name a
WHERE NOT EXISTS 
(
    SELECT viewer_id FROM table_name t 
    WHERE a.item_id=t.item_id AND t.viewer_id=2
)
GROUP BY item_id 
ORDER BY COUNT(item_id) DESC;