У меня есть следующий скрипт, который работает нормально, но я думаю,
а) некрасиво;
б) он не делает то, что мне нужно после запуска скрипта.
Сценарий должен работать следующим образом:
1) SQL выбирает всех операторов из данной таблицы, где дата регистрации находится в течение последнего месяца, сгруппированных по номеру оператора, где число больше 1, упорядоченное по дате регистрации в порядке возрастания. Короче говоря, верните список агентов, которые зарегистрировали более одного участника в предыдущем месяце.
2) Как только результаты будут возвращены, весь список будет отправлен мне по электронной почте (пока я не знаю, как этого добиться), и обновится таблица призов агентов (агенты, зарегистрировавшие более одного участника, получат приз).
Чтобы выполнить это, мой сценарий в настоящее время запускается обратно в циклы foreach (которые я ненавижу), чтобы выделить необходимые данные поля.
Любые предложения по улучшению процесса приветствуются.
SCRIPT:
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=dbname', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$sql = $db->query("SELECT AGENT FROM tablename WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 1 MONTH) GROUP BY AGENT HAVING COUNT(AGENT) >= 0 ORDER BY enroll_date ASC");
$result = $sql->fetchALL(PDO::FETCH_ASSOC);
foreach($result as $key=>$val) {
foreach($val as $ball=>$agentid) {
$sql2 = "UPDATE agent_prizes SET prize=?, method=? WHERE AGENT = '$agentid'";
$stmt = $db->prepare($sql2);
$stmt->execute(array("Y", "COMP"));
require('../phpmailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->Username = "user@domain.com";
$mail->Password = "";
$mail->SetFrom("user@domain.com");
$mail->Subject = "Subject";
$mail->MsgHTML("Message");
//I NEED TO RUN YET ANOTHER QUERY SELECT ABOVE TO CAPTURE THE AGENT EMAIL ADDRESS, LETTING THEM KNOW THEY HAVE WON A PRIZE
$mail->AddAddress($row["EmailAddress"]);
$mail->Send();
$mail->ClearAttachments();
$mail->ClearAllRecipients();
$mail->ClearReplyTos();
}
}
$db->commit();
$db->null;
}
catch (PDOException $e)
{
$db->rollback();
echo $e->getMessage();
exit;
}
?>