Php MySQL,结合DISTINCT和JOIN
我有一个用户表,叫做..等等。。。“用户”。。然后是另一个记录用户活动的表…你永远猜不到。。。“活动” 我有一个HTML表,它显示Php MySQL,结合DISTINCT和JOIN,php,mysql,sql,join,distinct,Php,Mysql,Sql,Join,Distinct,我有一个用户表,叫做..等等。。。“用户”。。然后是另一个记录用户活动的表…你永远猜不到。。。“活动” 我有一个HTML表,它显示users表中的用户,但我想按用户的上一个活动对该表进行排序 这是我的问题 SELECT * FROM `users` JOIN `activity` ON `activity`.`user_id` = `users`.`id` ORDER BY `activity`.`timestamp` LIMIT 25 这里的问题是,
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这不是SQL解决方案,但我要做的是在Users表中保留lastActivity列,并在需要时更新它。然后,按此列进行排序和筛选将非常简单和高效。您可以选择distinct()之类的distinct用户名。我对活动表的猜测是“活动”…您完全正确,但在开发阶段的这一点上,这将是更多的工作。是的,这完全取决于您在哪里使用它以及它是否必须高效。若并没有,那个么SQL解决方案是最简单的。有一些小错误,但这或多或少就是我要寻找的。非常感谢@阿德尔菲亚,抱歉出错!谢谢你接受我的回答!