mysql — выполнить длительный код php с подключением к базе данных

Я должен выполнить код PHP только один раз, чтобы внести некоторые изменения в мою базу данных, чтобы получить лучшие таблицы. Код слишком тяжелый и отправляет более 190000 запросов в базу данных (как выберите, так и вставьте).

Теперь проблема в том, что когда я выполняю его в браузере, формирую результат в базе данных и слова, которые я установил для отображения, чтобы проверить, правильно ли он работает, я могу обнаружить, что он выполняется частично. Нет ошибок / предупреждений / уведомлений появляется на странице.

Я установил максимальное время выполнения и все связанные настройки на 1 час, но это займет всего 30 минут и сразу остановит цикл for.

это пример части моего кода:

    for ($i=9;$i<=19909; $i++){
$j=0;
$select= "select synonym from synonym where x_=". $i ."";
//echo $select;
//echo "</br>";
$select_result= mysqli_query($connection,$select);
if (mysqli_num_rows($select_result)>0) {
$row = mysqli_fetch_assoc($select_result);
$arra = explode("،",$row["synonym"]);
}
while ($arra[$j]){
$text=trim($arra[$j]);
$search="select word from semiresult where word='". $text ."'";
$search_result= mysqli_query($connection,$search);
if (mysqli_num_rows($search_result)==0) {
$insert="insert into semiresult (x, word, synonym) values ('','". $text."','".$syn."')";
}elseif (mysqli_num_rows($search_result)>0){
$repeat="UPDATE semiresult SET synonym=CONCAT(synonym,'".$syn2."') where word like'".$arra[$j]."'";
$repeat_result=mysqli_query($connection,$repeat) or die ('request "Could not execute SQL query" '.$repeat);

}

0

Решение

С работой вы можете избежать этого в php. Стоит ли это зависеть от данных и таблиц, объявленных.

Например, предполагая, что слово имеет уникальный индекс в таблице полурезультатов и что поле синонима содержит не более 1000 полей с разделителями, вы можете сделать что-то вроде этого (не проверено): —

INSERT INTO semiresult (x, word, synonym)
SELECT '',
'". $text."',
SUBSRTING_INDEX(SUBSRTING_INDEX(t1.synonym, '،', (hundreds.aCnt * 100 + tens.aCnt * 10 + units.aCnt + 1)), '،', -1)
FROM synonym t1
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS units
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS tens
CROSS JOIN
(
SELECT 0 aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS hundreds
WHERE t1.x_ BETWEEN 9 AND 19909
AND LENGTH(t1.synonym) - LENGTH(REPLACE(t1.synonym, '،', '')) > (hundreds.aCnt * 100 + tens.aCnt * 10 + units.aCnt)
ON DUPLICATE KEY UPDATE synonym=CONCAT(synonym, VALUES(synonym))
1

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

в конце концов я решаю это !!
После изменения временных ограничений, таких как максимальное время выполнения и любые другие временные ограничения, до двух часов в настройках php, я добавляю эту строку кода в начале моего кода, затем она выполняется до конца кода.

set_time_limit(0);

Этот код планировалось выполнить только один раз, в противном случае я не делаю этого изменения.

0

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