美文网首页
mysql 1对多关系 用其他表字段对当前表进行排序

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

作者: 刘振宁的博客 | 来源:发表于2019-01-30 14:36 被阅读14次

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

    问题

    对于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 任意选择一个便可以.

    相关文章

      网友评论

          本文标题:mysql 1对多关系 用其他表字段对当前表进行排序

          本文链接:https://www.haomeiwen.com/subject/wwqcsqtx.html