資料表如下:
department表
|id|name|
user表
|id|name|department_id|
需求是得到以下結構的資料:
[查詢使用者列表}]
迴圈使用者列表查詢對應的部門資訊
$users = $db->query('select * from `user`');foreach($users as &$user)該方法查詢次數為:1+n(1次查詢列表,n次查詢部門),效能最低,不可取。
通過連表查詢使用者和部門資料
處理返回資料
$users = $db->query('select * from `user` inner join `department` on `department`.`id` = `user`.`department_id`');// 手動處理返回結果為需求結構該方法其實也有侷限性,如果 user 和 department 不在同乙個伺服器是不可以連表的。
該方法先查詢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)
解決資料庫N 1查詢問題
需求 資料表如下 department表 id name user表 id name department id 需求是得到以下結構的資料 方法一 迴圈查詢 查詢使用者列表 迴圈使用者列表查詢對應的部門資訊 users db query select from user foreach usersa...
如何解決查詢N 1問題
1.使用資料庫left join來實現,在一次資料庫查詢中查出多條資料,但是要對結果進行分組組裝。但是對於分頁支援不好,需要自定義分頁外掛程式,現有解決思路如下 編寫sql時,將主表的條件寫入到where條件中,將所有left join的條件寫到on中,使用and來拼接多個條件,然後編寫分頁外掛程式...
JPA 解決n 1次查詢問題
分兩步操作 1 主表實體類中,新增註解 namedentitygraph 如上,設定name值,並指定attributenodes 看名字就知道可以指定多個 每個node的值如下圖紅框 2 在主表的dao方法中 重寫用到的查詢方法,service層中呼叫什麼方法就重寫什麼方法,我這邊用到的是 pag...