需求
資料表如下:
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...