51php 数据不同步,php避免循环查询数据库优化一对多查询

您所在的位置:网站首页 php循环查询数据库优化 51php 数据不同步,php避免循环查询数据库优化一对多查询

51php 数据不同步,php避免循环查询数据库优化一对多查询

2023-10-28 09:48| 来源: 网络整理| 查看: 265

列表查询中一对多查询循环查询优化,mysql循环查询优化

描述

比如查询学生列表,每一行需要包含该学生的家长列表,一个学生对应多个家长。

06b89e30669038d8db23308848890351.png

循环查询方式

先查出学生列表,再循环查询对应的家长列表,需要查询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可以使用模型一对多关联查询



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3