php - 查询数据库以获取时间戳相同且电子邮件地址相同的多行

标签 php mysql cron

<?php
$curr = time();

$time_query = "SELECT * FROM users ";

$time_query_result = mysql_query($time_query, $db) or 

die("Could not execute sql: $time_query"); 

$num_result = mysql_num_rows($time_query_result);

for ($i1=0; $i1 < $num_result; $i1++){

    $row = mysql_fetch_array($time_query_result); 


    if ($curr > $row["time"] + 259200)//Do if it has been three days since brochure was selected
    {
           $arr = implode (',', $row);//TURN THE ROW[BROCHURES] ARRAY INTO IMPLODE THING INSIDE THIS LOOP!?!?!
        echo $arr;
        $message1  = '<html><body><p>Brochure reminder</p>';
        $message1 .= 'Brochures:<br />'.$arr .$row["brochures"]. $row["time"];
        $message1 .= '</body></html>';
        // Mail it
        mail($row['email'], $subject, $message1, $headers);
    }

} ?>

基本上,我想向选择宣传册的客户发送电子邮件。这部分已经完成并且很好,但我希望他们在三天后收到另一封电子邮件,提醒他们他们选择的小册子。我设置了一个 cron 作业,所以这段代码每三天重复一次。

当邮件被发送时,它会将它发送给正确的人,但所选的小册子会被分成单独的电子邮件。例如,如果某人选择了 5 份小册子,三天后他们将收到 5 封单独的电子邮件,每封邮件中都有一本不同的小册子。

我需要它,以便他们在三天后通过一封电子邮件收到所有小册子。真的很感激这一点,这几天一直让我发疯。答案似乎很简单,但我想不通。

谢谢!

最佳答案

您应该将时间逻辑移动到您的数据库查询中 - 获取所有行没有意义,只有在无事可做时才丢弃一些(大部分?全部?)行:

SELECT *
FROM users
WHERE `time` < (now() - INTERVAL 3 DAY)

完成后,我建议将实际的 mail() 部分从数据库获取循环中移出,这样您就可以先将每个用户的小册子批处理在一起:

$users = array();
while($row = mysql_fetch_array($time_query_result)) {
    if (!array_key_exists($row['userID'], $users)) {
        $users[$row['userID']] = array('email' => $row['email'], 'brochures' => array());
    $users[$row['userID']]['brochures'] = array('b' => $row['brochures'], 't' => $row['time']);
    }
}

然后您将遍历这个 $users 数组来为用户构建电子邮件:

foreach ($users as $user) {
     $text = '<html><body><p>Brochure reminder</p>';
     $i = 1;
     foreach ($user['brochures'] as $brochure) {
        $text .= 'Brochures:<br />'.$i++ .$row['b']. $row['b'];
     }
     $text .= '</body></html>';
     mail($user['email'], $subject, $text, $headers);
}

这样一来,您就可以一次性获取所有用户详细信息。然后,您为每个用户创建一封电子邮件,列出他们所有的小册子,并(希望)解决问题。

关于php - 查询数据库以获取时间戳相同且电子邮件地址相同的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218594/

相关文章:

php - 从 Php 备份我的数据库时遇到问题

Javascript如何提交表单?

javascript - 如何在每个新月安排 node-cron 作业?

Linux 脚本无法通过 crontab 删除文件,但它可以手动工作

c# - HangFire 重复任务数据

分布式环境(云)中的 PHP XDebug

php - 当相关表结构改变时mysql自动更新 View ?

带有枚举值的 MySQL 查询

mysql - 在 rails sqlite vs mysql 中随机选择

php - 获取两种数据并显示出来