MySQL关联表查询最新一条记录

884字
3分钟阅读
2018-12-12 13:54
技术笔记

需求描述

有一套用户系统,用户基础信息和用户操作记录分别存放在用户表 t_user 和用户操作记录表 t_user_operation_log 中,现在想关联两表,获取每个用户信息及该用户最新的一条操作记录信息。

初始化表结构为:
t_user 表:

字段 含义
id 用户id
name 用户名
... 其他信息

t_user_operation_log 表:

字段 含义
id 操作记录id
user_id 操作用户id
... 记录信息

具体实现

获取最新操作记录ID

第一步,需要根据用户获取每个用户的最新一条操作记录 id

SELECT
    MAX( id ) AS max_id
FROM
    t_user_operation_log
GROUP BY
    user_id;

获取操作记录完整信息

第一步获取到的只是操作记录的 id,但是我们希望获取用户操作记录的所有信息,所以只能重新关联自身获取记录的详细信息。

注意:这边不能直接加 user_id 除外的其他字段作为查询结果,结果记录会不一致)。

SELECT
    t_user_operation_log.*
FROM
    t_user_operation_log
    JOIN ( SELECT MAX( id ) AS max_id FROM t_user_operation_log GROUP BY user_id ) first_log ON t_user_operation_log.id = first_log.max_id ;

关联获取完整信息

最后再关联用户表获取每个用户的最新记录就可以了。

SELECT
    *
FROM
    t_user
    LEFT JOIN (
SELECT
    t_user_operation_log.*
FROM
    t_user_operation_log
    JOIN ( SELECT MAX( id ) AS max_id FROM t_user_operation_log GROUP BY user_id ) first_log ON t_user_operation_log.id = first_log.max_id
    ) log ON t_user.id = log.user_id;

注意

此种实现方式仅适用于通过单个SQL进行导表的操作,具体业务代码里不推荐只用,更适合分页后再获取相关记录信息。


发表评论

您的邮箱地址不会被公开。必填项已用*标注

评论列表

0 条评论

暂无评论

成为第一个评论者吧!