如何在while循环中选择另一个语句中的语句

问题描述 投票:0回答:1

我想根据order_id以降序显示我数据库中的所有订单

im使用while循环显示order_id,order_date和客户信息。


使用此循环时,它会重复多次order_id并将每个产品放入另一个订单显示中。

例如,订单13包含3个产品,因此订单13重复了3次

这是我的代码

<?php       
include '../php_action/db_connect.php';      
$sql="SELECT * FROM orders left join order_item on orders.order_id=order_item.order_id left join products on products.product_id=order_item.product_id left join category on products.category_id=category.category_id order by orders.order_id desc";
$result=$connect->query($sql); 
while($row=$result->fetch_array())
{  
?>            
<form action="" class="checkout-form" method="POST">
    <div class="row">
        <div class="col-lg-12">
            <div class="place-order">
                <h4>Order number # <?php echo $row['order_id']?> Order Date : <?php echo $row['order_date']?></h4>
                <div class="order-total">
                    <ul class="order-table">
                        <li>Product <span>Total</span></li>
                        <li class="fw-normal"><?php echo $row["product_name"].'  - '.$row['category_name'].'<br>'. $row['product_weight'].'KG ' .' X  ' .number_format($row["product_price"],0).' LBP'?> <span><?php echo 'LBP '.number_format($row['total'],0)?></span></li>
                        <li class="fw-normal">Subtotal <span><?php echo 'LBP '.number_format($row['subtotal'],0)?></span></li>
                        <li class="total-price" style="font-size:1.3em">Total <span><?php echo 'LBP '.number_format($row['grandtotal'],0)?> </span></li>
                    </ul>
                    <div class="payment-check">
                        <div class="pc-item">
                            <label for="pc-check">
                            <?php 
                            echo 'ORDER DATE: '.$row['order_date'];
                            echo '<br>';
                            echo 'FIRST NAME: '.$row['client_firstname'];
                            echo '<br>';
                            echo 'LAST NAME: '.$row['client_lastname'];
                            echo '<br>';
                            echo 'PHONE: '.$row['client_phone'];
                            echo '<br>';
                            echo 'CITY: '.$row['client_city'];
                            echo '<br>';
                            echo 'ADDRESS: '.$row['client_address'];
                            echo '<br>';
                            echo 'BLDG: '.$row['client_bldg'];
                            echo '<br>';
                            echo 'FLOOR NO: '.$row['client_floor'];
                            echo '<br>';
                            echo '<br>';
                            echo 'PAYMENT METHOD: Cash On Delivery';
                            ?>    
                            </label>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>
<?php } ?>

我想显示订单号和订单日期,并且要在订单表中显示表order_item中的所有产品,其中order_item.order_id = order.order_id

这应该如何工作?我的错误在哪里,我该如何解决?

php mysql sql
1个回答
0
投票

您可以通过许多不同的方法来实现,这是一种非常简单的方法,可用于显示所需的结果。

您还可以为product_priceorder_date等值设置所需的格式。>

<?php       
include '../php_action/db_connect.php';      
$sql="SELECT * FROM orders left join order_item on orders.order_id=order_item.order_id left join products on products.product_id=order_item.product_id left join category on products.category_id=category.category_id order by orders.order_id desc";
$result=$connect->query($sql);

$orders = [];

while($row=$result->fetch_array())
{
    $order_id = $row['order_id'];
    if(!in_array($order_id, array_keys($orders))){
        //Save Order details once  
        $orders[$order_id]['order_id'] = $row['order_id'];
        $orders[$order_id]['total'] = $row['total'];
        $orders[$order_id]['subtotal'] = $row['subtotal'];
        $orders[$order_id]['grandtotal'] = $row['grandtotal'];
        $orders[$order_id]['client_firstname'] = $row['client_firstname'];
        $orders[$order_id]['client_lastname'] = $row['client_lastname'];
        $orders[$order_id]['client_phone'] = $row['client_phone'];
        $orders[$order_id]['client_city'] = $row['client_city'];
        $orders[$order_id]['client_address'] = $row['client_address'];
        $orders[$order_id]['client_bldg'] = $row['client_bldg'];
        $orders[$order_id]['client_floor'] = $row['client_floor'];
    }
    //Push Products into the Order
    $orders[$order_id]['products'][] = [
        'product_name'=> $row['product_name'],
        'category_name'=> $row['category_name'],
        'product_weight' => $row['product_weight'],
        'product_price' => $row['product_price'],
        'total' => $row['total'],
        'qty' => 2,
    ];
}

foreach($orders as $row){
?>            
<form action="" class="checkout-form" method="POST">
    <div class="row">
        <div class="col-lg-12">
            <div class="place-order">
                <h4>Order number # <?php echo $row['order_id']?> Order Date : <?php echo $row['order_date']?></h4>
                <div class="order-total">
                    <ul class="order-table">
                        <!-- Loop through all the products for the current order -->
                        <?php foreach($row['products'] as $product){ ?>
                            <li>Product <span>Total</span></li>
                            <li class="fw-normal"><?php echo $product["product_name"].'  - '.$product['category_name'].'<br>'. $product['product_weight'].'KG ' .' X  ' .number_format($product["product_price"],0).' LBP'?> <span><?php echo 'LBP '.number_format($product['total'],0)?></span></li>
                        <?php } ?>                        
                            <li class="fw-normal">Subtotal <span><?php echo 'LBP '.number_format($row['subtotal'],0)?></span></li>
                            <li class="total-price" style="font-size:1.3em">Total <span><?php echo 'LBP '.number_format($row['grandtotal'],0)?> </span></li>
                    </ul>
                    <div class="payment-check">
                        <div class="pc-item">
                            <label for="pc-check">
                            <?php 
                            echo 'ORDER DATE: '.$row['order_date'];
                            echo '<br>';
                            echo 'FIRST NAME: '.$row['client_firstname'];
                            echo '<br>';
                            echo 'LAST NAME: '.$row['client_lastname'];
                            echo '<br>';
                            echo 'PHONE: '.$row['client_phone'];
                            echo '<br>';
                            echo 'CITY: '.$row['client_city'];
                            echo '<br>';
                            echo 'ADDRESS: '.$row['client_address'];
                            echo '<br>';
                            echo 'BLDG: '.$row['client_bldg'];
                            echo '<br>';
                            echo 'FLOOR NO: '.$row['client_floor'];
                            echo '<br>';
                            echo '<br>';
                            echo 'PAYMENT METHOD: Cash On Delivery';
                            ?>    
                            </label>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>
<?php } ?>
© www.soinside.com 2019 - 2024. All rights reserved.