Пытается запустить сценарий, чтобы отправлять пользователям свои индивидуальные расписания из моей базы данных.PHP While Loop In Loop Loop
Код должен выглядеть следующим образом: выберите всех пользователей из Таблицы 1, где пользователи хотят получать еженедельную электронную почту.
Затем возьмите эти user_ids и выполнить запрос, чтобы получить еженедельные графики для каждого пользователя из таблицы 2.
Если дата в таблице 2 меньше или равно 1 недели с момента, когда код RAN, и он не соответствует сегодняшней дате, а затем задает переменную $ email_content.
Если дата в Таблице 2 превышает 1 неделю, код должен знать, что это сделано, и здесь вы хотели бы продолжить и отправить() информацию, собранную для этого пользователя, и отправить только эту информацию, чтобы только этого пользователя, а затем перейти к следующему пользователю.
Там, где говорится, что эхо «ломать», это по существу означает разделение между расписанием каждого пользователя, но оно повторяется примерно 20 раз. Эта часть в идеале станет местом, где я помещаю функцию mail(), поэтому я не могу выполнить функцию mail() 20 раз.
Я пробовал тонну различных вариантов этого кода, но, похоже, не понял. Подводя итог, мне нужно получить Info1 для user1, то почта Info1 к user1, а затем перейти к получить info2 для user2, то почта info2 Пользователю2 и т.д ...
<?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)' say вместо 'IN (SELECT user_id FROM XXXXXX WHERE weekly_email = 'Yes)' – siride
Вы сравниваете две строки в if-блоках, когда хотите сравнить временные метки. Например, «четверг»> «воскресенье»? – Drakes
Спасибо @siride, я избавился от первого запроса в своем коде и обновил вторую рекомендацию. – Shane