Я использую простой сценарий, чтобы проверить предыдущие приглашения из таблицы MySQL и отправить новые приглашения. Но этот скрипт поддерживает занятость сервера и замедляет работу других скриптов. Как я должен изменить это?
for ($g=0; $g<500; $g++){
$lastsent = time() - (86400*30*6); // last 6 months
$chkinvlast = mysql_query("SELECT * FROM table WHERE (inv_email='$useremail[$g]' AND inv_datesent>'$lastsent')");
if (@mysql_num_rows($chkinvlast) < 1){
send_email($useremail[$g],$ltitle,$lbody);
}else{
echo "<br>Invitation for $user was NOT sent, because you already sent an invitation in last 6 months";
}
}
Удалить для цикла
$usermails = "(".implode(',',$usermail).")";
mysql_query("SELECT * FROM table WHERE (inv_email IN ($usermails) AND inv_datesent>'$lastsent')");
Или с подготовленными заявлениями:
$usermails = "(".implode(',',$usermail).")";
$in = str_repeat('?,', count($usermails) - 1) . '?';
$sql = "SELECT * FROM table WHERE inv_email IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($usermails);
$row= $stm->fetchAll();
Не делайте 500 звонков на сервер. Это полный и единственный возможный ответ. Конечно, это становится медленным тогда.
Решение состоит в том, чтобы изменить ваш запрос таким образом, чтобы он использовал функцию WHERE IN.
Посмотрите Вот за то, как принять это в вашей ситуации. В этом случае вы будете делать только 1 запрос вместо 500. Посмотрите, насколько быстрее он становится 😉