PHP MYSQL CONCAT

问题描述

我正在为COVID期间向弱势群体提供食物的一群当地企业做一些志愿工作。

订单示例:

Order No |  Customer Name | Address | Quantity | Item Name | Notes
===================================================
 #1234     |     Freda Smith      |3 High St   |      1     |   Loaf Bread  | Wholemeal 
 #1234     |     Freda Smith      |3 High St   |      2     |   500ml Milk  | Skimmed
 #1234     |     Freda Smith      |3 High St   |      1     |   Tea         | Eng. Breakfast

我需要将订单号#1234的所有详细信息打印到一张票证上,

#1234,Freda Smith,3 High St
     
1 X Loaf Bread,Wholemeal   
2 X 500ml Milk,skimmed  
1 X Tea,Eng. Breakfast

我喜欢CONCATCONCAT_GROUP,并试图通过将SELECT与HTML格式分开来解决问题,但无法获得所需的内容。我很近但是没有雪茄!

编辑:

SELECT IS:             $sql =    "SELECT id,Order_Number,Full_Name,Address,Time_To_Deliver,CONCAT(Quantity,Item_Name,Notes)
                FROM orders
                CONCAT_GROUP BY Order_Number";
                    
            $users = $MysqLi->query($sql);
            while($user = $users->fetch_assoc()){

解决方法

您当前的设计中有多余的数据,您应该通过为订单和订单项维护单独的表来normalize数据库结构,并且还可以添加客户表。

根据您当前的设计,您可以遍历所有行并有条件地显示每个订单号。只有一次。

select id,order_number,full_name,address,time_to_deliver,quantity,item_name,notes
from orders
order by order_number asc

这里的order by子句很重要,因此您将获得每个订单的有序列表。获得查询的所有结果后,您可以按以下方式遍历数据

$currentParent = false;
while ($orderItem = $result->fetch_assoc()) {
   if ($currentParent != $orderItem['order_number']) {
        // display common detail of each order here
        echo '<h1>' . $orderItem['order_number'] .' '. $orderItem['full_name'] .' '. $orderItem['address']'</h1>';
        $currentParent = $orderItem['order_number'];
    }
    echo '<p>' . $orderItem['quantity'] .' '. $orderItem['item_name'] . ' '. $orderItem['notes'] .'</p>'; // here list rest of the information of order iterms 
    ...     
}

生成的标记将类似于

<h1>#1234,Freda Smith,3 High St</h1>
    <p>1 X Loaf Bread,Wholemeal</p>
    <p>2 X 500ml Milk,skimmed </p>
<h1>#1235,3 High St</h1>
    <p>1 X Tea,Eng. Breakfast</p>
//....

尽管您可以直接在数据库级别对group_concat(请参阅Query for post and tags in same query)使用聚合,但是它具有字符数限制的限制,可以调整字符数限制,但是在处理这种类型时不是一个很好的方法应用层的情况