我已根据客户ID值加入了两个表,客户和订单。 订单表中有多个条目具有相同的客户ID。
当我显示订单表的条目时,每个订单后面都有客户详细信息。 相反,我希望客户详细信息显示一次,然后显示所有具有该客户ID的订单。
如何使用PHP和MySQL做到这一点?
我希望输出像
Customer1_name
Item 1 Quantity
Item 2 Quantity
Customer2_name
Item1 Quantity
Item2 Quantity
但我得到的是
Customer1_name
item1 quantity
Customer1_name
item2 quantity
如果他订购了2件物品
答案 0 :(得分:0)
一般来说,像这样:
执行您的查询,首先按客户ID排序,然后按订单ID排序(或者您希望在每个客户部分内对订单进行排序)。首先ORDER BY customer_id
非常重要;如果不这样做,这种方法将不起作用。
$stmt = $pdo->query('SELECT * FROM customers
INNER JOIN orders ON customers.id = orders.customer_id ORDER BY customer_id, order_id');
在您获取结果时,跟踪客户,并在客户更改时输出新客户信息并将当前客户替换为新客户。
$customer_id = null; // current customer - initialize to null
while ($row = $stmt->fetchObject()) {
if ($row->customer_id != $customer_id) {
// customer is different, so start a new customer section
echo $row->customer_name;
$customer_id = $row->customer_id; // reset the current customer
}
// always output your order information regardless of whether the customer has changed
echo $row->order_info;
}
答案 1 :(得分:0)
使用GROUP_CONCAT()
功能可以实现另一种方法,您只需获取一次客户详细信息,并以逗号分隔单独列中的其他订单详细信息。
考虑到我的表结构,我编写了以下查询,根据您的要求更改列名。
SELECT a.customer_id, a.cust_name, GROUP_CONCAT(b.item_name) FROM customers a
INNER JOIN orders b ON a.customer_id = b.customer_id
GROUP BY a.customer_id