如何在具有相同ID的数据库表中显示组合行

时间:2014-08-13 04:00:40

标签: php mysql merge

我有专家的问题。我不知道如何将所有订单ID与相同的ID组合,

如图所示,订单ID = 1的所有订单都在一个交易中,我如何将所有订单ID与相同的ID组合在一起,并且只显示所有购买的产品的总价格。由于所有订单ID都相同,因此交付和付款选项也只需显示一行即可。

以及后续问题是如果我合并所有相同的订单ID,计算总价格并在一行中显示交付和付款选项,我将如何显示所有购买的产品

enter image description here

这是我的数据库关系的图片,我只是按照互联网上的那些。唯一的区别是"产品"被改为"库存"和"序列"在产品中更改为" prod_id"

enter image description here

这是我显示当前图片的代码。

<?php
    session_start();
    $conn = @mysql_connect("localhost","root","");
    $db = @mysql_select_db("");

$qry = "SELECT customers.name,customers.payment,customers.carrier, orders.date, order_detail.productid, order_detail.quantity, order_detail.price, order_detail.orderid, inventory.prod_name 
        FROM customers 
        RIGHT JOIN orders on customers.serial=orders.serial 
        RIGHT JOIN order_detail on orders.serial=order_detail.orderid 
        LEFT JOIN inventory on order_detail.productid=inventory.prod_id where customers.email='{$_SESSION['email']}'";

mysql_set_charset("UTF8");
$result = @mysql_query($qry);
if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}
echo "<center>";
echo "<table class='CSSTableGenerator'>
<tr>

<td>Date of Purchase</td>
<td>First Name</td>
<td>Order ID</td>
<td>Products</td>
<td>Quantity</td>
<td>Total Price</td>
<td>Delivery Option</td>
<td>Payment Option</td>

<tr>";
while ($row=mysql_fetch_array($result)){
echo "<tr>";
echo "<td>".$row['date']."</td>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['orderid']."</td>";
echo "<td>".$row['prod_name']."</td>";
echo "<td>".$row['quantity']."</td>";
echo "<td>".($row['price']*$row['quantity'])."</td>";
echo "<td>".$row['carrier']."</td>";
echo "<td>".$row['payment']."</td>";
echo "</tr>";
    }
echo "</table>";
?>
</table>

1 个答案:

答案 0 :(得分:0)

对于这个特定问题,您似乎需要学习的是SQL Group By子句。

这个(未经测试,可能需要轻微调整)应该可以解决问题。请注意,您不会从中获得订单商品数量,但我会说可以获得订单商品数量。

SELECT o.date, c.name, o.serial as 'Order Id', GROUP_CONCAT(p.name) as 'Products', SUM(od.price) as 'Total', c.carrier, c.payment
FROM orders o
JOIN customers c on o.customer_id = c.serial
JOIN orderdetail od on o.serial = od.orderid
JOIN products p on od.productid = products.prod_id
GROUP BY o.serial

特别需要注意的是MySQL中一个名为GROUP_CONCAT的方便的聚合函数。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat