zoukankan      html  css  js  c++  java
  • 【PHP】 如何避免在foreach 里查询数据库

    直接上代码

    
    
    <?php
    
    ### 如何避免在foreach 里查询数据库
    
    /**
    *  场景: 
    * 		商品表: goods
    *				goods_id     商品ID
    *				goods_name   商品名称
    *				brand_id     品牌id
    *		品牌表:  brand
    *				brand_id
    *				brand_name
    **/
    
    //此时我们已经得到一组数据,想到拿到品牌名称(此处为了演示。不考虑链表查询的情况下)
    $data_list = [
    	[
    		'id'=>1,
    		'goods_id'=>1,
    		'goods_name'=>'老范测试',
    		'brand_id'=>1,
    		//或许会拿更多字段,比如 产地,规格,等等
    	],
    	//-----或许更多数据
    ];
    
    
    
    
    /**
    * 错误示例
    * 在业务量大的情况下。此处会多次读取数据库。增加数据库压力
    */
    foreach ($data_list as $key => $value) {
    	$brand_mes = Db::table('brand')->field('name')->where(['id'=>$value['brand_id']])->find()
    	if(!empty($brand_mes)){
    		$data_list[$key]['brand_name'] = $brand_mes['name'];
    	}else{
    		$data_list[$key]['brand_name'] = '老范品牌';  //此处给一个默认值
    	}
    }
    
    
    
    /**
    * 建议使用以下用法,数据库查询一次,把其他操作放在内存里,以减少数据库IO
    *
    */
    $brand_id_str = array_column($data_list,'brand_id');
    //查询当前品牌ID包含所有品牌信息
    $brand_list = Db::table('brand')->field('id,name')->whereIn('id',$brand_id_str)->select()
    $res_brand_array = [];
    if(!empty($brand_list)){
    	foreach ($brand_list as $k => $v) {
    		// brand_id => brand_name 以这种形式存储,便于读取
    		$res_brand_array[$v['id']]=>$v['name'];
    	}
    }
    //最后组装数据
    foreach ($data_list as $key => $value) {
    	if(isset($res_brand_array[$value['brand_id']]) && !empty($res_brand_array[$value['brand_id']])){
    		$data_list[$key]['brand_name'] =$res_brand_array[$value['brand_id'];
    	}else{
    		$data_list[$key]['brand_name'] = '老范品牌';  //此处给一个默认值
    	}
    	//此处也可以增加其他字段的判定操作
    }
    
    
    ?>
    
    
    
    欢迎做技术的朋友一起沟通交流!伸手党请绕道, 代码改变世界QQ群:453011886
  • 相关阅读:
    独木桥上的羊和狼
    Mac 如何截屏(快捷键)
    Mac 版 QQ 可直接访问 iPhone 的相册 ?!
    年轻时就该追求绚烂之极
    Java-HTTP连接时如何使用代理(二)—— Proxy类方式
    Java-HTTP连接时如何使用代理(一)—— System.Property方式
    妻子的空位——韩国一位单亲爸爸的心声
    不得不
    为了避免结束,你避免了一切开始
    iPhone —— 如何自制铃声(图文)
  • 原文地址:https://www.cnblogs.com/richerdyoung/p/14848235.html
Copyright © 2011-2022 走看看