我有一个用户表,名为..wait .“用户”。另一个记录用户活动的表格叫做.你永远猜不到.“活动”。
我有一个HTML,它显示users表中的用户,但是我想按用户的最后一个活动对表进行排序。
这是我的问题。
SELECT *
FROM `users`
JOIN `activity`
ON `activity`.`user_id` = `users`.`id`
ORDER BY `activity`.`timestamp`
LIMIT 25这里的问题是,它显示了每个用户的多个行,因为activity表中每个用户都有多个记录。
如何更改查询,使其只显示每个用户的一条记录,并按活动表中的最后一个活动对其进行排序。
我试过使用"DISTINCT“关键字,但没有运气:/
发布于 2013-12-11 07:40:57
“每个用户都有一个记录,并按活动表中的最后一个活动对其进行排序。”
库利试试这个?假设您同时需要用户信息和活动信息。
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,外部连接查找活动具有max_timestamp和user_id。
发布于 2013-12-11 07:57:03
这不是SQL解决方案,但我要做的是将lastActivity列保留在User表中,并在需要时进行更新。然后,按这一列进行排序、过滤将非常容易和有效。
https://stackoverflow.com/questions/20513207
复制相似问题