2013-12-11 69 views
1

我有一個用戶表,稱爲..等待它...「用戶」..然後另一個表記錄用戶的活動叫...你永遠不會猜測.. 。「activity」..MySQL,結合DISTINCT和JOIN

我有一個HTML表格,它顯示了users表中的用戶,但我想按用戶上次的活動排序表。

這是我的查詢。

SELECT * 
FROM `users` 
JOIN `activity` 
    ON `activity`.`user_id` = `users`.`id` 
    ORDER BY `activity`.`timestamp` 
     LIMIT 25 

這裏的問題是,它顯示了每個用戶的多個行,因爲有在activity表中的每個用戶的多條記錄。

如何更改查詢以僅爲每個用戶顯示一條記錄並按活動表中的最後一個活動排序。

我做實驗使用「DISTINCT」關鍵字,但沒有運氣:/

+0

您可以選擇不同的用戶名像 DISTINCT() – uvais

+1

我的活動表的猜測是「活動」 ... – irla

回答

2

「嗎?在活動表中的每個用戶,並命令他們在最後一個活動記錄」

Couly試試這個嗎?假設你需要用戶信息和活動信息。

SELECT users.*, a.* 
FROM users INNER JOIN (
    SELECT user_id, MAX(timestamp) max_timestamp 
    FROM activity 
    GROUP BY user_id 
) x ON users.user_id = x.user_id 
INNER JOIN activity a ON x.user_id = a.user_id AND a.timestamp = x.max_timestamp 
ORDER BY a.timestamp; 

內部子查詢查找max_timestamp每USER_ID和OUTER JOIN發現活動有max_timestamp和user_id說明

+0

了一些小錯誤,但這個是多了還是少了什麼我要找的。非常感謝! –

+0

@費城對不起,錯誤!並感謝您接受我的回答! –

0

這不是SQL的解決方案,但我會做的是保持lastActivity列在用戶表時更新需要。然後排序,通過這個列過濾將非常簡單和高效。

+0

你是完全正確的,但在開發階段的這一點上,這將是更多的工作。 –

+0

是的,它完全取決於你在哪裏使用它,如果它必須是有效的。如果不是SQL解決方案最簡單。 – irla