Това трябва да премахне ненужните цикли и допълнителни заявки, това може да не реши всичките ви отговори, но може да ви помогне по пътя.
Не съм тествал този код, така че не забравяйте първо да го стартирате в тестова среда, за да се уверите, че не съм направил проста грешка, която може да доведе до загуба на данни, поради естеството на заявките, поставям този отказ от отговорност, ПЪРВО ГО ТЕСТВАТЕ С ТЕСТОВИТЕ ДАННИ, МОЛЯ .
$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