巨大的建筑,总是由一木一石叠起来的,我们何妨做做这一木一石呢?我时常做些零碎事,就是为此。
这是对的,但是我没有说过这句话! —— 鲁迅
问题
对于1对多的查询,因为要对1方进行分页,所以不能用 left join 来进行连接.
之前写过一个用exists解决 1对多 分页的问题: https://www.jianshu.com/p/c6e558a2ab70
在 where 条件中可以用 exist来解决,那么要是用其他的表进行排序如何做呢?
分析问题
比如有两个表: enterprise企业表,和 capacityReport 运力表,一个企业可以上报多条运力,也就是1对多的关系。
mysql_enterprise_capacity.png现在要查询企业信息,并通过运力的id倒叙排列(id是自增的,也就是最新上报的企业在最前面)
因为是1对多,不能用Left join,没有表,order by的时候,怎么写呢?
解决方法.
where 后面可以用 exist 然后接select来实现,而 order by 之后可以直接接 select来进行查询:如下:
select * from enterprise e
order by ( select cr.id from capacityReport cr where e.id = cr.enterprise_id limit 1)
desc
这里的设定是企业一次上报运力,上报多个,但是之前的则作废,所以虽然一个企业有n个运力,但是运力的创建时间是一样的,所以用limit 1 任意选择一个便可以.
网友评论