需求描述
有一套用户系统,用户基础信息和用户操作记录分别存放在用户表 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进行导表的操作,具体业务代码里不推荐只用,更适合分页后再获取相关记录信息。