Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中连接多个表,然后使用PHP将它们显示为每个新父ID的一组表_Php_Mysql - Fatal编程技术网

如何在MySQL中连接多个表,然后使用PHP将它们显示为每个新父ID的一组表

如何在MySQL中连接多个表,然后使用PHP将它们显示为每个新父ID的一组表,php,mysql,Php,Mysql,首先,这里是我的ERD,提供必要的背景: 其次,以下是我希望我的代码实现的预期最终结果: 确认:我希望能够创建任意数量的新ProductionOrder(父项),这些订单可以有零个、一个或多个批次订单(子项),而批次订单本身由零个、一个或多个客户订单(子项的子项)组成 我这里的主要问题是知道如何为每个ProductionOrderID复制3个表(ProductionOrder、BatchOrder和CustomerOrder),如第二个屏幕截图所示 我目前的进展: connect db.p

首先,这里是我的ERD,提供必要的背景:

其次,以下是我希望我的代码实现的预期最终结果:

确认:我希望能够创建任意数量的新ProductionOrder(父项),这些订单可以有零个、一个或多个批次订单(子项),而批次订单本身由零个、一个或多个客户订单(子项的子项)组成

我这里的主要问题是知道如何为每个ProductionOrderID复制3个表(ProductionOrder、BatchOrder和CustomerOrder),如第二个屏幕截图所示


我目前的进展:

connect db.php

<?php
$server = "";
$user = "";
$pass = "";
$db = "";
$mysqli = new mysqli($server, $user, $pass, $db);
mysqli_report(MYSQLI_REPORT_ERROR);
?>
<?php
include('connect-db.php');
if ($result = $mysqli->query(
    "SELECT * FROM ProductionOrder p 
    INNER JOIN ProductionOrderStatus s 
    ON p.ProductionOrderID = s.ProductionOrderStatusID 
    INNER JOIN NotGood n 
    ON p.ProductionOrderID = n.NGID 
    INNER JOIN BatchOrder b 
    ON p.ProductionOrderID = b.BatchID"
))
{
    if ($result->num_rows > 0)
    {
        echo "<table class='table table-striped'>";
        echo "<tr> <th>PO ID</th> <th>PO #</th> <th>Order Quantity</th> <th>Balance Left</th> <th>Production Date</th> <th>PO Status</th> </tr>";
        while ($row = $result->fetch_object())
        {
            echo "<tr>";
            echo "<td>" . $row->ProductionOrderID . "</td>";
            echo "<td>" . $row->PONum . "</td>";
            echo "<td>" . $row->OrderQTY . "</td>";
            echo "<td>" . $row->BalLeftNum . "</td>";
            echo "<td>" . $row->ProductionDate . "</td>";
            echo "<td>" . $row->ProductionOrderStatus . "</td>";
            echo "</tr>";
            echo "</table>";
            //Display Batch Orders for contained Production Order
            echo "<table class='table table-striped'>";
            echo "<tr> <th>Batch ID</th> <th>Batch Quantity</th> <th>Available Date</th> <th>Balance Left</th> <th>Production Order</th> </tr>";
            echo "<tr>";
            echo "<td>" . $row->BatchID . "</td>";
            echo "<td>" . $row->BatchQTY . "</td>";
            echo "<td>" . $row->AvailDate . "</td>";
            echo "<td>" . $row->RemainBal . "</td>";
            echo "<td>" . $row->ProductionOrderID . "</td>";
            echo "</tr>";
            echo "</table>";
            //Display Customer Orders
            echo "<table class='table table-striped'>";
            echo "<tr> <th>Customer Order ID</th> <th>Invoice Quantity</th> <th>Invoice Number</th> <th>Shipment Date</th> <th>Batch Order</th> </tr>";
            echo "<tr>";
            echo "<td>" . $row->COID . "</td>";
            echo "<td>" . $row->InvoiceQTY . "</td>";
            echo "<td>" . $row->InvoiceNum . "</td>";
            echo "<td>" . $row->ShipDate . "</td>";
            echo "<td>" . $row->BatchID . "</td>";
            echo "</tr>";
            echo "</table>";
        }
    }
    else
    {
        echo "No results to display!";
    }
}
else
{
    echo "Error: " . $mysqli->error;
}
$mysqli->close();
?>

这就是我的知识停滞不前的地方,我无法找到一个现有的例子,我可以将其应用到我的需求中,但我迄今为止尝试的是:

Index.php

<?php
$server = "";
$user = "";
$pass = "";
$db = "";
$mysqli = new mysqli($server, $user, $pass, $db);
mysqli_report(MYSQLI_REPORT_ERROR);
?>
<?php
include('connect-db.php');
if ($result = $mysqli->query(
    "SELECT * FROM ProductionOrder p 
    INNER JOIN ProductionOrderStatus s 
    ON p.ProductionOrderID = s.ProductionOrderStatusID 
    INNER JOIN NotGood n 
    ON p.ProductionOrderID = n.NGID 
    INNER JOIN BatchOrder b 
    ON p.ProductionOrderID = b.BatchID"
))
{
    if ($result->num_rows > 0)
    {
        echo "<table class='table table-striped'>";
        echo "<tr> <th>PO ID</th> <th>PO #</th> <th>Order Quantity</th> <th>Balance Left</th> <th>Production Date</th> <th>PO Status</th> </tr>";
        while ($row = $result->fetch_object())
        {
            echo "<tr>";
            echo "<td>" . $row->ProductionOrderID . "</td>";
            echo "<td>" . $row->PONum . "</td>";
            echo "<td>" . $row->OrderQTY . "</td>";
            echo "<td>" . $row->BalLeftNum . "</td>";
            echo "<td>" . $row->ProductionDate . "</td>";
            echo "<td>" . $row->ProductionOrderStatus . "</td>";
            echo "</tr>";
            echo "</table>";
            //Display Batch Orders for contained Production Order
            echo "<table class='table table-striped'>";
            echo "<tr> <th>Batch ID</th> <th>Batch Quantity</th> <th>Available Date</th> <th>Balance Left</th> <th>Production Order</th> </tr>";
            echo "<tr>";
            echo "<td>" . $row->BatchID . "</td>";
            echo "<td>" . $row->BatchQTY . "</td>";
            echo "<td>" . $row->AvailDate . "</td>";
            echo "<td>" . $row->RemainBal . "</td>";
            echo "<td>" . $row->ProductionOrderID . "</td>";
            echo "</tr>";
            echo "</table>";
            //Display Customer Orders
            echo "<table class='table table-striped'>";
            echo "<tr> <th>Customer Order ID</th> <th>Invoice Quantity</th> <th>Invoice Number</th> <th>Shipment Date</th> <th>Batch Order</th> </tr>";
            echo "<tr>";
            echo "<td>" . $row->COID . "</td>";
            echo "<td>" . $row->InvoiceQTY . "</td>";
            echo "<td>" . $row->InvoiceNum . "</td>";
            echo "<td>" . $row->ShipDate . "</td>";
            echo "<td>" . $row->BatchID . "</td>";
            echo "</tr>";
            echo "</table>";
        }
    }
    else
    {
        echo "No results to display!";
    }
}
else
{
    echo "Error: " . $mysqli->error;
}
$mysqli->close();
?>

这里您可以做的是首先检索与生产订单id相关的所有必需数据,例如

$result = [
   0:{
     "poid":1,
     "po":2,
     "order_quantity":3,
     "batch_id": 2,
     "customer_id": 4,
     and all the required data for production order one

   },
   1:{
     "poid":1,
     "po":2,
     "order_quantity":3,
     "batch_id": 2,
     "customer_id": 4,
     and all the required data for production order two

   }
]
这个数组结构可能不正确,但类似这样的结构可以在foreach循环中使用。现在您可以在foreach中循环数组并打印表(即,三个表)。比如说

 foreach($result as $r){ 
//PO table
<table>
  <thead>
    <tr>
     <td>PO ID</td>
     <td>PO#</td>
     <td>Balance left</td>
     //etc.
    <tr>
 </thead>
 <tbody>
   <tr>
     <td><?php echo $r->poid; ?>
     <td><?php echo $r->po; ?>
     <td><?php echo $r->po_quantity; ?>
     //etc.
   </tr>
 </tbody>
</table>

//Batch table
<table>
   <thead>
      <tr>
       <td>Batch Id</td>
       <td>Batch Quantity</td>
       <td>Abailable date</td>
       //etc. 
      <tr>
   </thead>
   <tbody>
      <tr>
       <td><?php echo $r->batchid; ?>
       <td><?php echo $r->batchquantity; ?>
       <td><?php echo $r->date; ?>
       //etc.
      </tr>
   </tbody>
</table>
//and same for customer table
 }
foreach($result as$r){
//采购订单表
采购订单编号
PO#
左平衡
//等等。
//等等。
//批处理表
批次Id
批量
有效期
//等等。
//等等。
//客户表也是如此
}

希望这能给您一些想法

据我所知,您不能用一条SQL语句来实现这一点。最好是编写一个封装操作的存储过程。此外,这可能有助于: