mysql 1对多关系 用其他表字段对当前表进行排序

巨大的建筑,总是由一木一石叠起来的,我们何妨做做这一木一石呢?我时常做些零碎事,就是为此。
这是对的,但是我没有说过这句话! —— 鲁迅

问题

对于1对多的查询,因为要对1方进行分页,所以不能用 left join 来进行连接.
之前写过一个用exists解决 1对多 分页的问题: https://www.jianshu.com/p/c6e558a2ab70

在 where 条件中可以用 exist来解决,那么要是用其他的表进行排序如何做呢?

分析问题

比如有两个表: enterprise企业表,和 capacityReport 运力表,一个企业可以上报多条运力,也就是1对多的关系。

现在要查询企业信息,并通过运力的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 任意选择一个便可以.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章