我有一个用户表,称为..等待它...“用户”..然后另一个表记录用户的活动,称为...你永远不会猜到......“活动”..
我有一个HTML表格,显示users
表中的用户,但我想按用户的上一个活动订购该表。
这是我的询问。
SELECT *
FROM `users`
JOIN `activity`
ON `activity`.`user_id` = `users`.`id`
ORDER BY `activity`.`timestamp`
LIMIT 25
这里的问题是它为每个用户显示多行,因为activity
表中的每个用户都有多条记录。
如何更改查询以仅显示每个用户的一条记录,并按活动表中的最后一个活动进行排序。?
我尝试使用“DISTINCT”关键字,但没有运气:/
答案 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列并在需要时更新它。然后排序,按此列过滤将非常容易和有效。