解決資料庫N 1查詢問題

2021-09-25 04:18:12 字數 1135 閱讀 9399

需求

資料表如下:

department表

|id|name|

user表

|id|name|department_id|

需求是得到以下結構的資料:

[

}]

方法一:迴圈查詢

查詢使用者列表

迴圈使用者列表查詢對應的部門資訊

$users

=$db

->

query

('select * from `user`');

foreach

($usersas&

$user

)

該方法查詢次數為:1+n(1次查詢列表,n次查詢部門),效能最低,不可取。

方法二:1+1查詢

該方法先查詢1次使用者列表

取出列表中的部門id組成陣列

查詢步驟2中的部門

合併最終資料

**大致如下:

$users

=$db

->

query

('select * from `user`');

$departmentids=[

];foreach

($users

as$user)}

$departments

=$db

->

query

('select * from `department` where id in ('

.join

(','

,$department_id).

')')

;$map=[

];// [部門id => 部門item]foreach($departments as $department)

foreach

($users

as$user){

$user

['department']=

$map

[$user

['department_id']]

??null

;

解決資料庫N 1查詢問題

資料表如下 department表 id name user表 id name department id 需求是得到以下結構的資料 查詢使用者列表 迴圈使用者列表查詢對應的部門資訊 users db query select from user foreach users as user 該方法查...

如何解決查詢N 1問題

1.使用資料庫left join來實現,在一次資料庫查詢中查出多條資料,但是要對結果進行分組組裝。但是對於分頁支援不好,需要自定義分頁外掛程式,現有解決思路如下 編寫sql時,將主表的條件寫入到where條件中,將所有left join的條件寫到on中,使用and來拼接多個條件,然後編寫分頁外掛程式...

JPA 解決n 1次查詢問題

分兩步操作 1 主表實體類中,新增註解 namedentitygraph 如上,設定name值,並指定attributenodes 看名字就知道可以指定多個 每個node的值如下圖紅框 2 在主表的dao方法中 重寫用到的查詢方法,service層中呼叫什麼方法就重寫什麼方法,我這邊用到的是 pag...