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 任意選擇一個便可以.

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