PHP PDO получить результаты - PullRequest
       7

PHP PDO получить результаты

0 голосов
/ 20 октября 2010

У меня есть следующий скрипт, который работает нормально, но я думаю,

а) некрасиво;

б) он не делает то, что мне нужно после запуска скрипта.

Сценарий должен работать следующим образом:

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;
        }
?>

1 Ответ

2 голосов
/ 21 октября 2010

Это избавляет от второго foreach и (надеюсь - я не проверял) получает адрес электронной почты агента в одном выборе:

...
$sql = $db->query("SELECT tablename.AGENT AGENT, agent.EMAIL EMAIL, 
                   FROM tablename, agent 
                   WHERE enroll_date > DATE_SUB(CURDATE(),INTERVAL 1 MONTH) AND tablename.AGENT = agent.AGENT 
                   GROUP BY tablename.AGENT 
                   HAVING COUNT(tablename.AGENT) > 1 
                   ORDER BY enroll_date ASC");             
$result = $sql->fetchALL(PDO::FETCH_ASSOC);
foreach($result as $row)
{
  $sql2 = "UPDATE agent_prizes 
           SET prize=?, method=? 
           WHERE AGENT = '{$row["AGENT"]}'";
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...