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

如何在PHP的while循环中筛选数据实现同收件人仅发一封汇总提醒邮件

PHP 同邮箱订单提醒邮件汇总实现方案

核心思路

无需调整SQL查询逻辑,在遍历查询结果阶段先按邮箱地址分组归集所有对应订单ID,待全部数据遍历完成后再统一发送汇总邮件,即可实现同邮箱仅收1封提醒的需求。

实现代码

$query = "SELECT * FROM orders";
$result = mysqli_query($conn, $query);

// 初始化邮箱-订单映射数组,用于分组存储同邮箱的所有订单ID
$emailOrderList = [];

// 遍历查询结果完成分组归集
while ($row = mysqli_fetch_assoc($result)) {
    $currentEmail = $row['emailAddress'];
    $currentOrderId = $row['orderId'];
    // 首次遇到该邮箱时初始化空数组
    if (!isset($emailOrderList[$currentEmail])) {
        $emailOrderList[$currentEmail] = [];
    }
    array_push($emailOrderList[$currentEmail], $currentOrderId);
}

// 批量发送汇总邮件
$subject = "Payment Due Reminder";
foreach ($emailOrderList as $receiver => $orderIds) {
    // 拼接订单ID为易读的字符串格式
    $orderIdStr = implode('、', $orderIds);
    $content = "Due reminder message with order ID: $orderIdStr";
    mail($receiver, $subject, $content);
}

可选优化方案

如果订单数据量较大,可以直接在SQL层面完成分组聚合,减少PHP层的内存占用和运算量,查询语句示例:

SELECT emailAddress, GROUP_CONCAT(orderId SEPARATOR '、') AS all_order_ids 
FROM orders 
GROUP BY emailAddress

使用该SQL时PHP无需自行分组,直接遍历结果发送邮件即可。注意如果单个用户订单量极大,需要调整MySQL的group_concat_max_len参数避免结果截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:02