我目前有一个预约数据库的预约。这包含他们想要的菜单。这是我的SQL查询显示以及我想在我的网站上显示的内容
这显示了两个订单,以及每个订单的所有菜单项。我想在我的网站上将这些显示为两个单独的订单。 我的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,其中包含所有项目。
我将如何做到这一点?
答案 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();
}