51php 数据不同步,php避免循环查询数据库优化一对多查询
列表查詢中一對多查詢循環查詢優化,mysql循環查詢優化
描述
比如查詢學生列表,每一行需要包含該學生的家長列表,一個學生對應多個家長。
循環查詢方式
先查出學生列表,再循環查詢對應的家長列表,需要查詢N+1次
但在循環中查詢數據不但效率低下而且對數據庫造成很大對壓力,當循環次數多的時候,一方面會造成嚴重的網絡延遲,一方面可能會連接數據庫失敗,在開發中應該盡量避免在循環里查詢數據庫
優化方案
使用關聯查詢
聯合查詢所有數據行,再循環處理按學生歸類,查詢次數1
示例代碼
$list = $this
->field('s.id,s.name,u.nickname,u.avatar')
->alias('s')
->leftJoin('user_student us', 's.id = us.student_id')
->leftJoin('user u', 'us.user_id = u.id')
->where(['s.class_id' => $classId])
->paginate([
'list_rows' => $size,
'page' => $page,
]);
if ($list->isEmpty())
return ['data' => '', 'code' => 20404, 'msg' => '沒有數據'];
$temp = [];
foreach ($list as $k => $value) {
$temp[$value['id']] = ['id' => $value['id'], 'name' => $value['name']];
$temp[$value['id']]['parent_list'][] = $value;
}
$data = $list->toArray();
$data['data'] = array_values($temp);
return ['data' => $data, 'code' => 0, 'msg' => 'success'];
使用whereIn查詢
先查學生列表,再查出家長列表,最后循環處理數據,查詢次數2
thinkphp可以使用模型一對多關聯查詢
總結
以上是生活随笔為你收集整理的51php 数据不同步,php避免循环查询数据库优化一对多查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 已知某系统在通信联络中,数据结构
- 下一篇: java实现rsa欧几里得算法求d_RS