PHP & MySQL 「数据关联一对一」的最佳实践
发表于 2019-8-8 | | 自我提升

goods

类型 注释

id int(11) 自动增量 主键ID

title varchar(100) 商品名称

price decimal(10,2) 商品价格

cover varchar(100) 商品封面



goods_detail

类型 注释

id int(11) 自动增量 主键ID

goods_id int(11) 商品ID

content varchar(5000) 商品图文介绍



$db = new PDO();

$query = $db->query('select from goods');

$result = $query->fetchAll();



$goods_id = array_column($result,'id');

$goods_id_str = implode(',',$goods_id);

$query = $db->query(sprintf('select
from goods_detail where goods_id in (%s)',$goods_id_str));

$goods_detail_list = $query->fetchAll();



$goods_detail_list_by_keys = array_column($goods_detail_list,null,'goods_id');



$goods_detail_default = [

    'content' => '默认内容',

    'id'      => null,

    'goods_id'=> null,

];

foreach($result as &$item){

    $tmp = array_key_exists($goods_detail_list_by_keys,$item['id']) ? $goods_detail_list_by_keys[$item['id']] : [] ;

    // php 7.1+

    // $tmp = $goods_detail_list_by_keys[$item['id']] ?? [];

    $item['goods_detail'] = array_merge($goods_detail_default,$tmp);

}

unset($item);

var_dump($result);

发表评论:

TOP