这是我从“实际上它是两个不同表的视图”
获取数据的表第二个是日志表,记录观看视频的人以及他们何时观看视频。
log_views.id,
log_views.user_id,
log_views.video_id,
log_views.date,
users.user_key,
users.name_display,
users.img_key
我想要的是显示最近18位用户观看视频,但我不想要任何重复的用户。因此,如果用户在过去18次中出现两次我只想要他的最新视图,然后跳过所有其他视图。
我尝试使用DISTINCT
关键字,但我收到了多个列,因此无效。
答案 0 :(得分:0)
看看这些指针:
MySQL Group By with top N number of each kind
http://explainextended.com/2009/03/06/advanced-row-sampling/
答案 1 :(得分:0)
这就是我最终使用的内容。
recent_video_viewers
是我制作的视图的名称,因此我不需要进行任何连接
SELECT id, MAX(date), user_id, img_key, random_key
FROM recent_video_viewers
WHERE video_id = '$vr[id]' AND img_key != ''
GROUP BY user_id
ORDER BY MAX(date) DESC
LIMIT 18
我不确定这是否是最好的方法,但它有效。
答案 2 :(得分:0)
这是一个有效的查询。它假设您只需要给定视频ID的日志(@video_id):
SELECT log_date, user_id, name_display
FROM (
SELECT MAX(l.date) AS log_date, user_id
FROM log_views AS l
WHERE (l.video_id=@video_id)
GROUP BY user_id
ORDER BY log_date DESC
LIMIT 18
) AS top
INNER JOIN users AS u ON (u.user_key=top.user_id)