PHP - 如何显示餐馆预订

时间:2016-01-27 16:22:24

标签: php mysql pdo

我目前有一个预约数据库的预约。这包含他们想要的菜单。这是我的SQL查询显示以及我想在我的网站上显示的内容 Database

这显示了两个订单,以及每个订单的所有菜单项。我想在我的网站上将这些显示为两个单独的订单。 我的PHP代码如下使用PDO,不包括数据库连接和查询等。

        $resultset = $conn->query($query, PDO::FETCH_OBJ);

        while($result=$resultset->fetch())
        {
                echo "Order Details:<br> CustomerID: $result->CustomerID<br>PaymentID: 
$result->PaymentID<p>
        Booking Details:<br> Date: $result->Date<br> 
    Time: $result->Time <p>Menu Items:<br>";

            echo "$result->MealName x$result->Quantity<br>";
        }
    ?>  

然而,这只是输出网站;

Order Details:
CustomerID: 1
PaymentID: 1
Booking Details:
Date: 2016-01-22
Time: 21:00:00

Menu Items:
Mexican Rib Eye Steak x2
Order Details:
CustomerID: 1
PaymentID: 1

Booking Details:
Date: 2016-01-22
Time: 21:00:00

Menu Items:
Mexican Mess x2
Order Details:
CustomerID: 1
PaymentID: 1

Booking Details:
Date: 2016-01-22
Time: 21:00:00

我只希望每个订单显示一次customerID / PaymentID,其中包含所有项目。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可能希望按预订ID进行分组,因为客户可以在同一天下达多个订单。也就是说,我按客户ID和预订ID订购查询。然后调整您的循环,以便它检测预订ID何时从最后一次迭代时的变化。如果是,输出客户信息。像这样:

$last = null;
while (...) {
    if ($result->ReservationID !== $last) {
        // output per-order header
    }
    // output item details
    $last = $result->ReservationID;
}

或者,您可以分两步完成 - 首先获取今天的订单列表,然后为每个订单列出详细信息。这是一种更加面向对象的方法。你必须为每个对象编写一个类。例如:

$restaurant = new Restaurant($id);
foreach ($restaurant->getOrdersForDate($today) as $order) {
    $order->render();
}

Order :: render()方法看起来像:

public function render() {
    $this->renderHeader();
    foreach ($this->getItems() as $item) {
        $item->render();
    }
    $this->renderFooter();
}