Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL,结合DISTINCT和JOIN_Php_Mysql_Sql_Join_Distinct - Fatal编程技术网

Php MySQL,结合DISTINCT和JOIN

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 这里的问题是,

我有一个用户表,叫做..等等。。。“用户”。。然后是另一个记录用户活动的表…你永远猜不到。。。“活动”

我有一个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这不是SQL解决方案,但我要做的是在Users表中保留lastActivity列,并在需要时更新它。然后,按此列进行排序和筛选将非常简单和高效。

您可以选择distinct()之类的distinct用户名。我对活动表的猜测是“活动”…您完全正确,但在开发阶段的这一点上,这将是更多的工作。是的,这完全取决于您在哪里使用它以及它是否必须高效。若并没有,那个么SQL解决方案是最简单的。有一些小错误,但这或多或少就是我要寻找的。非常感谢@阿德尔菲亚,抱歉出错!谢谢你接受我的回答!