You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现合并相同日期的订单商品行 同日期商品在同一行展示

解决方案

你可以通过两种方式实现同日期订单商品合并展示的需求:

方案1:SQL层面直接聚合(推荐)

利用MySQL的GROUP_CONCAT函数直接在查询时完成同日期商品的拼接,代码量最小:

<table>
  <tr>
    <th>Orders</th>
    <th>Date Ordered</th>
  </tr>
  <?php
  // 修改SQL查询,按日期分组拼接商品
  $showOrder = mysqli_query($conn, "SELECT dateOrdered, GROUP_CONCAT(item SEPARATOR ', ') AS items FROM orderdetails GROUP BY dateOrdered ORDER BY dateOrdered DESC");
  while ($row = mysqli_fetch_array($showOrder)){
    $items = $row['items'];
    $date = $row['dateOrdered']; 
  ?>
  <tr>
    <td><?php echo "<p>".$items."</p>"; ?></td>
    <td><?php echo "<p>".$date."</p>"; ?></td>
  </tr>
  <?php } ?>
</table>

注意:如果拼接的商品名称过长超出默认长度限制,可以在查询前先执行mysqli_query($conn, "SET SESSION group_concat_max_len = 10240");调整长度阈值。

方案2:PHP层面聚合

如果不想修改SQL逻辑,也可以先查出所有订单数据,在PHP中按日期归类后再输出:

<table>
  <tr>
    <th>Orders</th>
    <th>Date Ordered</th>
  </tr>
  <?php
  // 先查询所有订单
  $showOrder = mysqli_query($conn, "SELECT item, dateOrdered FROM orderdetails ORDER BY dateOrdered DESC");
  $orderGroups = [];
  // 按日期分组
  while ($row = mysqli_fetch_array($showOrder)){
    $orderGroups[$row['dateOrdered']][] = $row['item'];
  }
  // 循环输出分组结果
  foreach ($orderGroups as $date => $items) {
  ?>
  <tr>
    <td><?php echo "<p>".implode(', ', $items)."</p>"; ?></td>
    <td><?php echo "<p>".$date."</p>"; ?></td>
  </tr>
  <?php } ?>
</table>

额外提示:如果后续需要加日期筛选等条件,建议使用MySQL预处理语句避免SQL注入风险。

内容的提问来源于stack exchange,提问作者Jesse Villanueva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:06:04