我有一个来自数据库的数组,我想用php 格式化和显示
Array (
[customer] => Array (
[customer_id] => 1
[firstname] => Mitchell
[lastname] => Bray
[order_id] => 3
[date_added] => 2012-01-17 11:22:30
[name] => iPod Shuffle
[quantity] => 1
)
)
Array (
[customer] => Array (
[customer_id] => 1
[firstname] => Mitchell
[lastname] => Bray
[order_id] => 3
[date_added] => 2012-01-17 11:22:30
[name] => iPod Touch
[quantity] => 1
)
)
Array (
[customer] => Array (
[customer_id] => 1
[firstname] => Mitchell
[lastname] => Bray
[order_id] => 14
[date_added] => 2012-01-25 08:39:54
[name] => iPod Touch
[quantity] => 2
)
)
Array (
[customer] => Array (
[customer_id] => 1
[firstname] => Mitchell
[lastname] => Bray
[order_id] => 14
[date_added] => 2012-01-25 08:39:54
[name] => HTC Touch HD
[quantity] => 3
)
)
Array (
[customer] => Array (
[customer_id] => 2
[firstname] => M
[lastname] => Bray
[order_id] => 15
[date_added] => 2012-02-02 14:33:45
[name] => HTC Touch HD
[quantity] => 1
)
)
我想显示这样的东西:
Mitchell Bray
iPod Shuffle qty 3
iPod Touch qty 3
HTC Touch HD qty 3
M Bray
HTC Touch HD qty 1
添加了sql查询,如果这有助于
$sql = "
select c.customer_id, c.firstname, c.lastname,
o.order_id, o.date_added,
op.name, op.quantity
from `" . DB_PREFIX . "customer` c
inner join `" . DB_PREFIX . "order` o on o.customer_id = c.customer_id
inner join `" . DB_PREFIX . "order_product` op on o.order_id = op.order_id";
您应该使用group-by.修改查询如下:
$sql = "select c.customer_id, c.firstname, c.lastname,
o.order_id, o.date_added,
op.name, sum(op.quantity)
from `" . DB_PREFIX . "customer` c
inner join `" . DB_PREFIX . "order` o on o.customer_id = c.customer_id
inner join `" . DB_PREFIX . "order_product` op on o.order_id = op.order_id
group by c.customer_id, op.name
";
检查更新答案:
$sql = "select c.customer_id, c.firstname, c.lastname, op.name, sum(op.quantity)
from `" . DB_PREFIX . "customer` c
inner join `" . DB_PREFIX . "order_product` op on o.order_id = op.order_id
group by c.customer_id, op.name
";
更新2:
$sql = "select *, sum(quantity) from (select c.customer_id, c.firstname, c.lastname, op.quantity from `" . DB_PREFIX . "customer` c
inner join `" . DB_PREFIX . "order` o on o.customer_id = c.customer_id
inner join `" . DB_PREFIX . "order_product` op on o.order_id = op.order_id
) result
group by result.customer_id, result.name
";
$customers = array();
foreach ($data as $key => $values) {
if (!isset($customers[$values['id']])) {
$name = $values['firstname'].' '. $values['lastname'];
$customers[$values['id']]['name'] = $name;
} else {
$customers[$values['id']]['order'][] = $values['name']. ' '. $values['quantity'];
}
}
foreach ($customers as $customer) {
$string = $customer['name'] . '<br/>';
foreach ($customer['order'] as $oder) {
$string .= $oder. '<br/>';
}
print $string;
}
可能是您正在为客户下订单时选择的每个产品运行插入语句,或者您的数据库没有规范化。
我的建议是维护一个购物车,买家可以在其中添加商品,然后在确认订单时生成一个逗号或分号分隔的商品列表,并将该字符串存储在数据库列中。当你稍后取回它时,你会得到一个字符串,你可以分解它来获得独立的元素。
更好的方法是将itemid存储为串联字符串,而不是它们的名称。这是您的所有订单详细信息,属于该订单的项目将在一行中,而不是同一订单的多行中。
你的数据库表可能看起来像
customerid orderid项ordertime1 3 23,6,35,41201201-17 11:22:30
当您分解包含该购买中物品id的物品字符串后,您将获得一个物品id的数组
[23,6,35,41]您可以使用itemid来获取项目的详细信息。
如果你也想存储像(ipod x 3)这样的项目数量,你可以将项目字符串存储为
itemid,quantily;itemid,数量;itemid,数量