Php 如何正确选择多个一对多行?
我们有三张桌子 1) 订单 主键 订单号 2) 订购产品 PK | FK |列|列 订单(产品)标识|订单|标识|产品|标识|名称|数量 3) 订购产品组件 PK | FK |列|列|列 订单(产品)零部件|订单(产品)标识|库存|标识|名称|数量Php 如何正确选择多个一对多行?,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我们有三张桌子 1) 订单 主键 订单号 2) 订购产品 PK | FK |列|列 订单(产品)标识|订单|标识|产品|标识|名称|数量 3) 订购产品组件 PK | FK |列|列|列 订单(产品)零部件|订单(产品)标识|库存|标识|名称|数量 表2和表3具有一对多关系 因此,如果我们想要获得一系列订单产品及其组件,那么我们可以使用的最佳查询是什么 最后,结果应该是这种格式(如果我们只有一个产品和两个组件): 由于order是一个保留字,我已将order表名称更改为“orders”。我正在
表2和表3具有一对多关系 因此,如果我们想要获得一系列订单产品及其组件,那么我们可以使用的最佳查询是什么 最后,结果应该是这种格式(如果我们只有一个产品和两个组件):
由于order是一个保留字,我已将order表名称更改为“orders”。我正在使用join来获得预期的结果。我认为按你想要的方式分组是没有用的
$sql= "select * from orders o join order_products op on o.order_id=op.order_id";
$stmt = $db->prepare($sql);
$stmt->execute();
$orders =$stmt->fetchAll();
foreach($orders as $o){
$sql= "select stock_id,name,quantity from order_products op
join order_product_components opc on opc.order_product_id=op.order_product_id where op.order_product_id=:orderprodid";
$stmt = $db->prepare($sql);
$stmt->execute(array('orderprodid'=>$o['order_product_id']));
$comps =$stmt->fetchAll();
$o['stocks']=$comps;
}
您可能不希望执行查询循环,这可能非常昂贵
只需按产品id、产品名称等将所有表和订单连接起来即可。。。股票id,股票名称,。。。然后在结果中循环并一次性构建数组 据我所知,MySQL将返回一行数组。我认为没有任何方法可以实现嵌套数组。您需要通过多个查询检索数据,并在代码中生成结果。仅供参考,您不能通过一个查询从sql中提取多维数组。您需要1个用于订单数据,1个用于订单附带的项目。我理解这一点。所以我的问题是什么是最好的方法?分组、加入?顺序是一个保留字。我们的起点不好。除非Kamil确实需要来自它的其他未指定数据,否则不需要对
order[s]
表的引用。只要使用WHERE op.order_id
就足够了,可以减少连接的数量。
$sql= "select * from orders o join order_products op on o.order_id=op.order_id";
$stmt = $db->prepare($sql);
$stmt->execute();
$orders =$stmt->fetchAll();
foreach($orders as $o){
$sql= "select stock_id,name,quantity from order_products op
join order_product_components opc on opc.order_product_id=op.order_product_id where op.order_product_id=:orderprodid";
$stmt = $db->prepare($sql);
$stmt->execute(array('orderprodid'=>$o['order_product_id']));
$comps =$stmt->fetchAll();
$o['stocks']=$comps;
}