Mysql
 sql >> база данни >  >> RDS >> Mysql

завъртете в цикъл mysql заявка

Това трябва да премахне ненужните цикли и допълнителни заявки, това може да не реши всичките ви отговори, но може да ви помогне по пътя.

Не съм тествал този код, така че не забравяйте първо да го стартирате в тестова среда, за да се уверите, че не съм направил проста грешка, която може да доведе до загуба на данни, поради естеството на заявките, поставям този отказ от отговорност, ПЪРВО ГО ТЕСТВАТЕ С ТЕСТОВИТЕ ДАННИ, МОЛЯ .

    $rest_max = '200';

    $query = "SELECT * 
        FROM `mailer_lists` ml  
            JOIN `mailer_controller` mc ON ml.project_name = mc.project_name
        WHERE `email` LIKE '%".$throttle_domain."' LIMIT ".$trim_speed."" ;

    $result = mysql_query($query) or die(mysql_error());
    $delete=array();

    while($row = mysql_fetch_assoc($result)){
        $email = $row['email'];
        $project_name = $rowa['project_name'];
        $from_name = $rowa['from_name'];
        $from_email = $rowa['from_name']."@".$node_domain;
        $subject = $rowa['subject'];
        $body = $rowa['body'];
        $content = addslashes($body);

    // set header
    $header_from = 'From: '.$from_name.' <'.$from_email.'>';
    $header_reply_to = '-f  '.$from_email;

    // send mail
    mail($email,$subject,$body,$header_from,$header_reply_to);


    $delete[] = " (project_name = '$project_name' AND email = '$email') ";
}

if (!empty($delete)) {
    mysql_query("DELETE FROM mailer_lists 
        WHERE " . implode(' OR ', $delete)) or die(mysql_error());  
}

Лесен начин за тестване е да коментирате mail част и променете DELETE FROM към SELECT * FROM и изведете ехо това, което идва от избраното, за да се уверите, че са излезли правилните данни, които е трябвало да бъдат изтрити.

МОЛЯ, ПРОЧЕТЕТЕ ПО-ДОЛУ

По-добър начин да направите изтриването обаче е да използвате Tables ID поле и го запазете в $delete . Тъй като това би облекчило OR изявление и минимизирайте грешката от случайно изтриване на валидни редове. Ето как ще работи това (току-що използвах края, заменете ID с каквото и да е полето ви за идентификация:

    $delete[] = $row['id'];
}

if (!empty($delete)) {
    mysql_query("DELETE FROM mailer_lists 
        WHERE id IN(" . implode(', ', $delete) . ")") or die(mysql_error());  
}

АКТУАЛИЗИРАНЕ

Не съм сигурен колко бързо ще работи това и т.н. Но един възможен начин да го направите, без да го има в цикъл, е:

    // Fill the array however you want to with the domains. this is just an example
    $throttle = array('domain1.com', 'domain2.com', 'domain3.com');
    $query = "SELECT * 
        FROM `mailer_lists` ml  
            JOIN `mailer_controller` mc ON ml.project_name = mc.project_name
        WHERE `email` LIKE '%". implode("' OR `email` LIKE '%", $throttle) . "'  LIMIT ".$trim_speed." ORDER BY project_name, email";

Отново това не е изпробвано и не съм сигурен доколко би съвпадало по отношение на производителността. Но нещо за тестване.

РЕДАКТИРАНЕ :Променено на fetch_assoc в сравнение с fetch_array



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на local.js за съхраняване на sails-mysql парола

  2. MySQL:Връща само последното съобщение в таблицата за плоски/разговорни съобщения

  3. Настройване на Django да използва MySQL

  4. JDBC връща изключение на MySQLSyntaxError с правилно изявление

  5. Как да използвам вмъкване в конструктора на заявки, вмъкване на множество записи?