我有一个用户表,叫..等等…”用户“。。然后是另一个记录用户活动的表,叫做……你永远猜不到……”活动“。。
我有一个HTML表,它显示users
表中的用户,但是我想按用户的最后一个活动来排序表。
这是我的问题。
SELECT *
FROM `users`
JOIN `activity`
ON `activity`.`user_id` = `users`.`id`
ORDER BY `activity`.`timestamp`
LIMIT 25
这里的问题是,它为每个用户显示多行,因为
activity
表中每个用户都有多条记录。如何将查询更改为每个用户只显示一条记录,并按活动表中的最后一个活动排序。?
我试过使用“DISTINCT”关键字,但没有成功:/
最佳答案
“每个用户一条记录,并按活动表中的最后一个活动排序。”
能试试这个吗?假设你需要用户信息和活动信息。
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;
内部子查询查找每个用户id的最大时间戳,外部联接查找活动具有最大时间戳和用户id
关于php - MySQL,结合DISTINCT和JOIN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20513207/