2011-03-29 95 views
0

這裏是我的「其實這是兩個不同的表的視圖」複雜MySQL查詢具有鮮明

  • 獲取數據的第一個表是用戶表中保存有關用戶的一切表。
  • 第二個是日誌表,用於記錄觀看視頻的人以及他們何時查看視頻。

    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

這就是我最終使用。 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 

我不知道這是否是做到這一點的最好辦法,但它的工作原理的視圖的名稱。

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 ([email protected]_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)