【问题标题】:PHP MYSQL CONCATPHP MYSQL 连接
【发布时间】:2020-12-11 15:53:52
【问题描述】:

我正在为一群当地企业在 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()){

【问题讨论】:

  • 你有一些打印票的代码(或者甚至是循环打印票的循环)
  • 你不需要 concat。您需要遍历订单中的项目并呈现工单中的项目。客户姓名和地址不应该在每个订单项目记录中重复 - 我认为这是让你失望的原因。
  • 我正在循环,但只能为每个项目获取一个单独的行,或者只有一个包含第一个项目的行。
  • 您可以使用 group_concat 然后在 , 上分解(或解析为 CSV),但这与迭代结果对象并仅输出一次订单元数据相同(如果id 相同,不输出订单信息,只输出数量、备注和名称)。
  • 你能上传你的PHP代码吗?

标签: php mysql concat group-concat


【解决方案1】:

您当前的设计有冗余数据,您应该 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, Freda Smith, 3 High St</h1>
    <p>1 X Tea, Eng. Breakfast</p>
//....

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

【讨论】:

  • 太棒了,谢谢!我现在要发货了,但我会尽快听取您的建议。非常感谢,谢谢!
  • 成功了!太感谢了!您帮助一些非常脆弱的人生活得更轻松!
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-10-07
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多