мой скрипт тормозит другие скрипты

Я использую простой сценарий, чтобы проверить предыдущие приглашения из таблицы 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";
}
}

-1

Решение

Удалить для цикла

$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();
1

Другие решения

Не делайте 500 звонков на сервер. Это полный и единственный возможный ответ. Конечно, это становится медленным тогда.

Решение состоит в том, чтобы изменить ваш запрос таким образом, чтобы он использовал функцию WHERE IN.

Посмотрите Вот за то, как принять это в вашей ситуации. В этом случае вы будете делать только 1 запрос вместо 500. Посмотрите, насколько быстрее он становится 😉

0

По вопросам рекламы [email protected]