如何正确选择几个一对多行?

时间:2015-05-08 22:25:00

标签: php mysql sql pdo

我们有3张桌子。

1)订单

PK

的order_id

2)订单_产品

PK | FK |专栏|柱

order_product_id | order_id | product_id |名字|量

3)订单_产品_组件

PK | FK |专栏|专栏|柱

order_product_component_id | order_product_id | stock_id |名字|量

表2和表3具有一对多的关系。

因此,如果我们想要获得一系列订购产品及其组件,我们可以使用哪种最佳查询?

最后结果应该是这种格式(如果我们只有1个产品有2个组件):

$products = array(
     array(
    '    'product_id' => x,
         'name'       => x,
         'quantity'   => x,
         'stocks'     => array(
              array(
                   'stock_id' => x,
                   'name'     => x,
                   'quantity' => x),
              array(
                   'stock_id' => x,
                   'name'     => x,
                   'quantity' => x)));

2 个答案:

答案 0 :(得分:0)

由于订单是保留字,我已将订单表名称更改为“订单”。我正在使用join来获得预期的结果。我认为group by不会像你想要的那样得到结果。

 $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;
    }

答案 1 :(得分:0)

您可能不想进行查询循环,这可能非常昂贵。

只需查询加入所有表格并按产品ID,产品名称,...库存ID,库存名称等排序,然后循环显示结果并一次性构建数组。