Ini akan menghapus loop yang tidak perlu dan pertanyaan tambahan, ini mungkin tidak menyelesaikan semua jawaban Anda, tetapi dapat membantu Anda di sepanjang jalan.
Saya belum menguji kode ini, jadi pastikan untuk menjalankannya di lingkungan pengujian terlebih dahulu untuk memastikan bahwa saya tidak membuat kesalahan sederhana yang dapat menyebabkan hilangnya data, karena sifat kueri, saya memberikan penafian ini, TEST DULU DENGAN DATA TEST HARAP .
$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());
}
Cara mudah untuk menguji adalah mengomentari mail
bagian dan ubah DELETE FROM
ke SELECT * FROM
dan gema apa yang berasal dari pilih untuk memastikan data yang tepat yang seharusnya dihapus keluar.
HARAP BACA DI BAWAH
Namun, cara yang lebih baik untuk menghapus adalah dengan menggunakan ID
Tabel bidang dan simpan itu di $delete
. Karena itu akan meringankan OR
pernyataan dan meminimalkan kesalahan karena tidak sengaja menghapus baris yang valid. Begini cara kerjanya (cukup gunakan akhiran, ganti ID
dengan apa pun bidang id Anda:
$delete[] = $row['id'];
}
if (!empty($delete)) {
mysql_query("DELETE FROM mailer_lists
WHERE id IN(" . implode(', ', $delete) . ")") or die(mysql_error());
}
PERBARUI
Saya tidak yakin seberapa cepat ini akan berjalan, dll. Tetapi satu cara yang mungkin untuk melakukannya, tanpa memasukkannya ke dalam loop adalah:
// 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";
Sekali lagi ini belum teruji, dan saya tidak yakin bagaimana kinerjanya akan cocok. Tapi sesuatu untuk Anda uji.
EDIT :Diubah menjadi fetch_assoc
seperti yang berlawanan dengan fetch_array