Я хочу получить 100000 записей по SQL-запросу, используя MySql Xampp и сохранить в массив, но он не получает даже 16000 и останавливается или показывает

0

Неустранимая ошибка: максимальное время выполнения 30 секунд превышено в C:\xampp\htdocs\MapRouting\Routing.php

Да, я могу установить максимальное время выполнения, но я хочу получить результат за меньшее время, например, в MySql, когда человек нажимает на таблицу, он дает результат, например, показывая строки 0 - 24 (всего 16037 запросов, набрал 0,0032 секунды).

$link = mysqli_connect("localhost","root","","example");

if (mysqli_connect_error()) {
    echo "error";
}

$rows = array();
$count = 0;

for ($J=0; $J <= 3; $J++) { 
    $count = $count + 4000;

    for ($i = 1; $i <= $count; $i++) {
        $offset_var = $i - 1;   
        $query = "select id from shipment Limit 1 OFFSET ".$offset_var;
        $result = mysqli_query($link, $query);

        while ($row = mysqli_fetch_assoc($result)) {
            $rows[] = $row;
        }
    }
}

mysqli_close($connection);  
echo "<pre>";print_r($rows);echo "</pre>";
Теги:

5 ответов

0
Лучший ответ

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

    select id from shipment Limit 1 OFFSET 0
    select id from shipment Limit 1 OFFSET 1
    select id from shipment Limit 1 OFFSET 2
    select id from shipment Limit 1 OFFSET 3
    select id from shipment Limit 1 OFFSET 4
    select id from shipment Limit 1 OFFSET 5
    ...

Попробуйте это и посмотрите сами

//$link=  mysqli_connect("localhost","root","","example");
//if (mysqli_connect_error()) {
//    echo "error";
//}
$rows=array();
$count=0;
for( $J=0; $J<=3; $J++) {
    $count = $count + 10;
    for($i=1;$i<=$count;$i++) {
         $offset_var=$i-1;
         $query="select id from shipment Limit 1 OFFSET " . $offset_var;
         //$result=  mysqli_query($link, $query);
         //while ($row = mysqli_fetch_assoc($result)) {
         //    $rows[]= $row;
         //}
         echo $query."\n";
    }
}
//mysqli_close($connection);
//echo "<pre>";print_r($rows);echo "</pre>";

Если вы хотите запустить запрос, чтобы получить 4000 результатов на страницу/запрос?

Тогда следующий код будет делать это в 26 запросах

$link=  mysqli_connect("localhost","root","","example");
if (mysqli_connect_error()) {
    echo "error";
}
$rows=array();
$page_size=4000;
$total_records=100000;

$count=ceil($total_records/$page_size);
for($i=0; $i<=$count; $i++) {
   $offset_var = $i * $page_size;
   $query = "select id from shipment Limit ".$page_size." OFFSET ".$offset_var;
   $result=  mysqli_query($link, $query);
     while ($row = mysqli_fetch_assoc($result)) {
       $rows[]= $row;
     }
}
mysqli_close($connection);
echo "<pre>";print_r($rows);echo "</pre>";
  • 0
    Брат, мне нужны все записи Total 10000 или выше, какая бы ни была логика, но проблема в том, что это занимает слишком много времени, и это дает мне нехватку памяти (выделено 320864256) (попытался выделить 4096 байт), это дает максимум памяти, но когда я уменьшить это также дает мне ошибку bcz в массиве строк, он содержит максимальное количество записей, и мой вывод не достиг, чтобы получить все 100000 записей, которые он останавливает после 8000, когда я выводил во время цикла
  • 0
    Если вы не намерены отображать все эти записи пользователям своего приложения, вам следует запрашивать только необходимые данные (данные, отображаемые на одной странице). Согласно приведенному выше примеру `например, показаны строки 0–24 (всего 16037, запрос выполнен). 0.0032 секунд.) `... Эта система может запрашивать только ~ 650 (16037/25) на запрос с ограничением в 650 записей. Чтобы получить следующий набор данных, необходимо выполнить тот же запрос еще раз, обновив правильное значение OFFSET. данные в переменную (в память), а затем делать то, что вы хотите сделать, в конечном итоге требует больше памяти для обработки
Показать ещё 2 комментария
4

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

Попробуйте увеличить время выполнения?

ini_set('max_execution_time', 300);

Это даст ему 5 минут для выполнения.

  • 0
    Спасибо, брат, но я хочу, чтобы эти записи были в более короткие сроки, как в моем sql, когда одним щелчком мыши по таблице он показывает все записи за 000,32 секунды, например, показывает строки 0–24 (всего 16037, запрос занял 0,0032 секунды.
0

По умолчанию максимальное время выполнения для скриптов PHP устанавливается в 30 секунд. Если скрипт работает более 30 секунд, PHP останавливает скрипт и сообщает об ошибке. Вы можете контролировать количество времени, в течение которого PHP позволяет запускать скрипты, изменяя директиву max_execution_time в файле php.ini.

Чтобы изменить максимальное время выполнения, используйте текстовый редактор, чтобы изменить директиву max_execution_time в файле php.ini. Например, чтобы установить максимальное время выполнения на 600 секунд (10 минут), используйте следующую настройку:

max_execution_time = 600

Эта модификация должна быть выполнена в файле php.ini

0

Обновить max_execution_time в php.ini до 600 секунд

Или вы можете обновить его и в php.

ini_set('max_execution_time', 600);

Здесь 600 - это время в секундах /10 минут.

0

Используйте функцию ниже.

set_time_limit(0);

Максимальное время выполнения, в секундах. Если установлено равным нулю, лимит времени не налагается.
для получения дополнительной информации любезно посетите эту ссылку set_time_limit.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню