PHP多表取数据的代码优化
<?php
header("Content-type: text/html; charset=utf-8");
//假设这里的$goods_arr 和 $shop_arr 都是从数据库中查询出来的数组
$goods_arr = array(
0 => array(
'activity_id' => 1,
'activity_name' => '午夜今日特价345345sss',
'shop_id' => 300001,
),
1 => array(
'activity_id' => 2,
'activity_name' => '0点档限量抢购',
'shop_id' => 300002,
),
2 => array(
'activity_id' => 3,
'activity_name' => '凌晨惊爆抢购',
'shop_id' => 300003,
),
3 => array(
'activity_id' => 4,
'activity_name' => '午夜限时抢购',
'shop_id' => 300003,
'create_time' => 1395050666,
'update_time' => 1411887987,
'is_del' => 1,
),
4 => array(
'activity_id' => 5,
'activity_name' => '早场限量秒杀',
'shop_id' => 300001,
),
5 => array(
'activity_id' => 6,
'activity_name' => '9点底价抢购',
'shop_id' => 300002,
)
);
$shop_arr = array(
0 => array(
'shop_id' => 300001,
'shop_name' => '一号店',
),
1 => array(
'shop_id' => 300002,
'shop_name' => '天猫商城',
),
2 => array(
'shop_id' => 300003,
'shop_name' => '京东',
),
3 => array(
'shop_id' => 300004,
'shop_name' => '当当网',
)
);
//传统做法,需要循环查询 tbShop表 的 次数就是 count($goods_arr)
foreach($goods_arr as $k=>$v){
$goods_arr[$k]['shop_name'] = "select shop_name from tbShop where shop_id = $v[shop_id]";//这里只是SQL语句,能够表达意思即可。
}
//重点开始....................
$temp = array();
foreach($shop_arr as $val){
$temp[$val['shop_id']] = $val;
}
//通过引用传递 &$v 将key "shop_name" 付给 $goods_arr [精辟]
foreach($goods_arr as &$v){
$shop_id=$v['shop_id'];
$v['shop_name']= $temp[$shop_id]['shop_name'];
}
print_r($goods_arr);
/**
//最后结果
Array
(
[0] => Array
(
[activity_id] => 1
[activity_name] => 午夜今日特价345345sss
[shop_id] => 300001
[shop_name] => 一号店
)
[1] => Array
(
[activity_id] => 2
[activity_name] => 0点档限量抢购
[shop_id] => 300002
[shop_name] => 天猫商城
)
[2] => Array
(
[activity_id] => 3
[activity_name] => 凌晨惊爆抢购
[shop_id] => 300003
[shop_name] => 京东
)
[3] => Array
(
[activity_id] => 4
[activity_name] => 午夜限时抢购
[shop_id] => 300003
[create_time] => 1395050666
[update_time] => 1411887987
[is_del] => 1
[shop_name] => 京东
)
[4] => Array
(
[activity_id] => 5
[activity_name] => 早场限量秒杀
[shop_id] => 300001
[shop_name] => 一号店
)
[5] => Array
(
[activity_id] => 6
[activity_name] => 9点底价抢购
[shop_id] => 300002
[shop_name] => 天猫商城
)
)
*/
?>
PHP多表取数据的代码优化的更多相关文章
- Drf 序列化 ModelSerializer跨表取数据
1.对于OneToOne.Foreignkey.choices字段可以使用source取出相关信息: class CourseSerializer(serializers.ModelSerialize ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- Oracle 取两个表中数据的交集并集差异集合
Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...
- 组件 layui 表单抓取数据四步走
注意事项: layui 中提交按钮是基于"监听"机制实现的. form.on() 的调用需置于 layui.use 的回调函数中. 末尾的 'return false' 不可或缺, ...
- 部分真验货客户未取进FP IN_SALES_ORDER表有数据,前台规划页面没显示
描述:部分真验货客户未取进FP,检查发现IN_SALES_ORDER表有数据630\600\610行项目数据,但前台只显示630数据,600和610前台没有显示 1.查看IN_SALES_ORDER表 ...
- 简单又强大的pandas爬虫 利用pandas库的read_html()方法爬取网页表格型数据
文章目录 一.简介 二.原理 三.爬取实战 实例1 实例2 一.简介 一般的爬虫套路无非是发送请求.获取响应.解析网页.提取数据.保存数据等步骤.构造请求主要用到requests库,定位提取数据用的比 ...
- EF里单个实体的增查改删以及主从表关联数据的各种增删 改查
本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...
- MySQL单表百万数据记录分页性能优化
背景: 自己的一个网站,由于单表的数据记录高达了一百万条,造成数据访问很慢,Google分析的后台经常报告超时,尤其是页码大的页面更是慢的不行. 测试环境: 先让我们熟悉下基本的sql语句,来查看下我 ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
随机推荐
- [BS-15] Values of type 'NSInteger' should not be used as format arguments
Values of type 'NSInteger' should not be used as format arguments 苹果app支持arm64以后会有一个问题:NSInteger变成64 ...
- HtmlAgilityPack教程
解析html教程(重点) http://www.cnblogs.com/kissdodog/archive/2013/02/28/2936950.html 完整的教程 http://www.cnblo ...
- javascript设计模式学习之十七——程序设计原则与面向接口编程
一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...
- 【转】解决:fatal error C1083: 无法打开预编译头文件
http://blog.csdn.net/aafengyuan/article/details/7988584 是这样的,我创建了一个空项目,并通过"项目属性>C/C++>预编译 ...
- 查找文件并执行的shell命令
来由 经常我们需要找到某类文件, 并对进行处理. 例如找到.svn文件夹, 然后删除掉. 如果不使用shell,你可以选择手动删除, 前提是没有几个此类文件, 但是svn信息文件很多, 不能采用手动删 ...
- Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)
控制台程序. 适配器类是指实现了监听器接口的类,但监听器接口中的方法没有内容,所以它们什么也不做.背后的思想是:允许从提供的适配器类派生自己的监听器类,之后再实现那些自己感兴趣的类.其他的空方法会从适 ...
- Servlet 3特性:异步Servlet
解异步Servlet之前,让我们试着理解为什么需要它.假设我们有一个Servlet需要很多的时间来处理,类似下面的内容: LongRunningServlet.java package com.jou ...
- Beyond Compare
Beyond Compare是一个比较文件和文件夹的工具. 它可以帮助你找到并协调源代码.文件夹.图像和数据间的差异,即使包括zip文档中或者FTP站点上的文件. 另外它还可以同步化文件夹并验证不 ...
- PHP判断手机号码是否合法
<html> <head> <script language="JavaScript"> function checkMobile(input) ...
- VS2012离线安装Xamarin (含破解补丁)
Xamarin离线安装包 来源于 忘忧草 特此感谢! 离线安装不成功:参考源 http://www.cnblogs.com/zjoch/p/3937014.html / http://www.cnb ...