MySQL,结合DISTINCT和JOIN

时间:2013-12-11 07:37:09

标签: php mysql sql join distinct

我有一个用户表,称为..等待它...“用户”..然后另一个表记录用户的活动,称为...你永远不会猜到......“活动”..

我有一个HTML表格,显示users表中的用户,但我想按用户的上一个活动订购该表。

这是我的询问。

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

这里的问题是它为每个用户显示多行,因为activity表中的每个用户都有多条记录。

如何更改查询以仅显示每个用户的一条记录,并按活动表中的最后一个活动进行排序。?

我尝试使用“DISTINCT”关键字,但没有运气:/

2 个答案:

答案 0 :(得分:2)

  

“每个用户的一条记录,并按活动表中的最后一个活动进行排序。”

请试试这个?假设您需要用户信息和活动信息。

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;

内部子查询找到每个user_id的max_timestamp,外部JOIN查找活动有max_timestamp和user_id

答案 1 :(得分:0)

这不是SQL解决方案,但我要做的是在Users表中保留lastActivity列并在需要时更新它。然后排序,按此列过滤将非常容易和有效。