CakePHP 使用JOIN進行多表聯合查詢

2021-10-06 18:22:50 字數 1928 閱讀 4474

在 select, update 和 delete 語句中可以使用 join 來進行多表聯合查詢,join按照功能分為以下三類:

例如有以下三張資料表,它們之間沒有關聯關係,但都有city_code字段:

現需要從三張資料表中聯合查詢,原始sql語句如下:

select a.city_name, b.city_population, c.city_gdp

from cities a

inner join city_infos b

on (

a.city_code = b.city_code

and b.modified_year = '2020'

)inner join city_indicators c

on (

a.city_code = c.city_code

and c.modified_year = '2020'

)order by a.city_code asc

在cakephp的controller類中實現以上聯合查詢,方式如下:

$this->cities->find()

->select([

'cities.city_name',

'cityinfos.city_population',

'cityindicators.city_gdp'

])->innerjoin(

['cityinfos' => 'city_infos' //設定表的別名],[

'cities.city_code = cityinfos.city_code',

'cityinfos.modified_year' => '2020'])

->innerjoin(

['cityindicators' => 'city_indicators' //設定表的別名],[

'cities.city_code = cityindicators.city_code',

'cityindicators.modified_year' => '2020'])

->order([

'cities.city_code' => 'asc'

])->map(function($row) )

->toarray();

或者把所有要聯合的表寫在一起:

$this->cities->find()

->select([

'cities.city_name',

'cityinfos.city_population',

'cityindicators.city_gdp'

])->join([

'cityinfos' => [ //設定表的別名

'table' => 'city_infos',

'type' => 'inner',

'conditions' => [

'cityinfos.city_code = cities.city_code',

'cityinfos.modified_year' => '2020']],

'cityindicators' => [ //設定表的別名

'table' => 'city_indicators',

'type' => 'inner',

'conditions' => [

'cityindicators.city_code = cities.city_code',

'cityindicators.modified_year' => '2020']]

])->order([

'cities.city_code' => 'asc'

])->map(function($row) )

->toarray();

python對流進行join

對流的合併,有時各個流的進度需要根據資料的不同而定。def joinstreams instreams,getnext lambda data,livings livings 把各流進行關聯,instreams是流陣列,getnext函式決定從哪些流中取下一批資料,輸入引數為流編號,輸出應為需要從哪...

cakephp中使用查詢中joins

cakephp中使用查詢中joins 在cakephp中使用複雜的sql查詢是件麻煩的事情,我覺得是,你當然可以通過手寫sql語句解決,但是這樣導致的結果是其中的paginator不能用的,本來由cakephp得到的分頁資訊都得自己來寫,夠麻煩,好不容易找到下面的方法,可以這樣使用連線自己想要的表,...

使用Join代替In

我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...