我有一个用户表,叫..等等…”用户“。。然后是另一个记录用户活动的表,叫做……你永远猜不到……”活动“。。
我有一个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/

10-15 09:14