@reddyk1

Как сделать выборку и обработать данные пачками?

Нужно по расписанию каждый день обрабатывать данные из таблицы:
1) Выборка
2) Последовательная обработка каждой записи
3) Обновление полей у записи
Проблема в том, что общая выборка может быть очень большой, а хотелось бы обрабатывать как-то пачками...
Собственно в голове у меня есть несколько решений:
1) доп поле last_check
2) делать выборку и класть ее в redis
Есть ли еще какие-то варианты, которые я упустил?
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Единственные лимит это хранение выбранных данных в памяти скрипта во время работы.
Данные можно доставать по частям, аналогично тому как делается пагинация на любом сайте.
Например, если в таблице есть поле id (autoincrement), то можно выбирать данные порциями с условием типа id > XXXXX
Дополнительно прикрутить last_check тоже можно, если это требует логика приложения.

Пример кода ниже, для понимания логики. Вместо mysqli можно использовать pdo или что угодно
<?php
//$db = new mysqli(); //соединение с БД

$min_id = 0;
$LIMIT = 1000;

//в цикле идём от id = 0 до id = "самый максимальный", выбирая по 1000 записей за раз.
while(true)
{
    $result = $db->query("SELECT * FROM `table` WHERE `id` > '{$min_id}' LIMIT {$LIMIT}");

    //если записей больше не найдено прерываем цикл
    if($result->num_rows == 0)
    {
        break;
    }
    
    while($row = $result->fetch_assoc())
    {
         //обрабатываем данные производим манипуляции

        //сохраняем последний обработанный id
        $min_id = $row['id'];
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы