场景:一对多的两张数据表,分别为A和B,A、B表通过A表的主键进行关联,也就是B表中海油多列的包含有A表ID的数据。
A表-用户表
id | username |
---|---|
1 | jack |
2 | mark |
B表-用户资产表
id | uid | property | create_time |
---|---|---|---|
1 | 1 | computer | 2018-11-11 |
2 | 1 | phone | 2018-11-12 |
3 | 2 | computer | 2018-13-11 |
3 | 2 | bike | 2018-14-11 |
- 对B表的数据进行分组
select * from B group by 'uid'
这时候每个分组获取的是随机排序的分组数据中的第一行
-对B表的数据进行分组,并获取分组数据中最新的一行数据
select * from ( select * from B order by create_time desc LIMIT 0,1000000000000000 ) sl group by create_time
先对B表数据进行排序,则取出的分组数据即为B表中create_time最新的那一行数据,其中经过实践,需要加上limit,否则没效果,估计和mysql版本有关。
补充:
这时候,假如有一个接口,进行分页查询满足一定资产且是这个用户当前最新资产(如有PC)的用户列表(需要返回满足条件的中数据条数),这时候就需要知道要在A表关联查询用户的资产,可以使用join关联B表,并只要查询最新创建时间(create_time)是的资产,就可以使用上面的方法,使用内联,关联B表,判断满足条件的总数据数。
SELECT * FROM `A` `s` INNER JOIN ( SELECT * FROM ( SELECT * FROM `B` ORDER BY `create_time` DESC LIMIT 0,1000000000000000 )sl GROUP BY `uid` ) `sl` ON `sl`.`uid`=`s`.`id` AND `sl`.`property` IN ('computer','bike') LIMIT 0,4