यह अनावश्यक लूप और अतिरिक्त प्रश्नों को हटा देना चाहिए, यह आपके सभी उत्तरों को हल नहीं कर सकता है, लेकिन रास्ते में आपकी मदद कर सकता है।
मैंने इस कोड का परीक्षण नहीं किया है, इसलिए यह सुनिश्चित करने के लिए पहले इसे एक परीक्षण वातावरण में चलाना सुनिश्चित करें कि मैंने एक साधारण गलती नहीं की है जिससे डेटा हानि हो सकती है, प्रश्नों की प्रकृति के कारण, मैंने यह अस्वीकरण रखा है, <मजबूत> परीक्षण डेटा के साथ पहले इसका परीक्षण करें .
$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
और यह सुनिश्चित करने के लिए चयन से जो आता है उसे प्रतिध्वनित करें ताकि यह सुनिश्चित हो सके कि जो उचित डेटा हटाया जाना चाहिए था वह बाहर आ गया।
कृपया नीचे पढ़ें
हालाँकि, हटाने का एक बेहतर तरीका है, टेबल्स 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
. पर लागू होता है