【发布时间】:2016-11-27 22:41:18
【问题描述】:
尝试运行一个脚本,将我的数据库中的用户个人日程通过电子邮件发送给用户。
代码应该是这样的...从表 1 中选择所有用户想要他们每周的电子邮件。
然后获取这些 user_id 并运行查询以从表 2 中获取每个用户的每周计划。
如果表 2 中的日期距离代码运行时间小于或等于 1 周,并且不等于今天的日期,则设置变量 $email_content。
如果表 2 中的日期超过 1 周,那么代码应该知道它已经完成,这里希望继续并 mail() 为该用户收集的信息并仅发送该信息,仅该用户,然后继续下一个用户。
它说 echo "break" 的地方,它本质上是在标记每个用户的日程安排之间的间隔,但它回显了大约 20 次。理想情况下,这部分将成为我放置 mail() 函数的地方,所以我不能让它也执行 mail() 函数 20 次。
我已经尝试了该代码的大量不同变体,但似乎无法正确使用。总而言之,我需要为 user1 获取 info1,然后将 info1 发送给 user1,然后继续为 user2 获取 info2,然后将 info2 发送给 user2,等等......
<?php
// GET USERS WHO WANT THEIR WEEKLY SCHEDULE EMAILED TO THEM (Table 1)
$sql = "SELECT * FROM XXXXXXX WHERE weekly_email = 'Yes'";
$result = mysqli_query($connection, $sql);
while ($row = mysqli_fetch_array($result)) {
$id .= "'" . $row['user_id'] . "', ";
}
$id = trim($id, ', ');
// GET THOSE USERS' SCHEDULES (Table 2)
$sql_email = "SELECT * FROM XXXXXXXX WHERE user_id IN ($id) ORDER BY user_id, date, start_time ASC";
$result_email = mysqli_query($connection, $sql_email);
while ($row_email = mysqli_fetch_array($result_email)) {
$truck_name_email = $row_email['truck_name'];
$location_name_email = $row_email['location_name'];
$date_email = $row_email['date'];
$address_email = $row_email['address'];
$x = strtotime("7 days");
$start_email = $row_email['start_time'];
$end_email = $row_email['end_time'];
if ($date_email <= date("m/d/Y l", $x)) {
if ($date_email !== date("m/d/Y l")) {
if (!empty($address_email)) {
$address_email2 = explode(",", $row_email['address'], 2);
$email_content = $date_email . substr($date_email, 11) . " - "
. $location_name_email . ", " . $address_email2[0] . ", "
. $start_email . "-" . $end_email . "<br/>";
echo $email_content;
} elseif (empty($address_email)) {
$email_content .= $date_email . " - " . $location_name_email
. ", " . $start_email . "-" . $end_email . "<br/>";
echo $email_content;
}
}
}
if ($date_email >= date("m/d/Y l", $x)) {
echo "break";
// break;
}
}
【问题讨论】:
-
不需要两次查询。只需使用子查询。你有
IN($id)的地方说IN(SELECT user_id FROM XXXXXX WHERE weekly_email = 'Yes) -
当您想比较时间戳时,您正在比较 if 块中的两个字符串。例如“星期四”>“星期日”?
-
谢谢@siride,我删除了代码中的第一个查询,并根据您的建议更新了第二个查询。
-
@Drakes 这两个字符串本质上是“07/24/16 Sunday”
标签: php mysql if-statement while-loop