Массовое MySQL обновление вместо PHP пока цикл - PullRequest
0 голосов
/ 30 января 2020

Я использую код PHP для обновления даты окончания недели, которая отличается для каждого субдомена. Диапазон дат каждого субдомена варьируется.

Мой текущий код использует время l oop для обновления даты окончания недели. Это очень медленно, и я ищу идеи для его оптимизации.

Вот мой текущий код:


// Loop through and assign week end date to each user activity.
$nextWeek = $startDate;  // initialise while loop condition
while ($nextWeek <= $endDate) {
    $lastWeek = $nextWeek;
    $nextWeek = Carbon::parse($lastWeek)->addWeek(1)->format('Y-m-d');

    // update activity date to week end date
    $query = 'UPDATE r_active_user_activities 
                SET week_end_date = "' . $nextWeek . '"
                WHERE (activity_date > "' . $lastWeek . '" 
                    AND activity_date <= "' . $nextWeek . '"  
                    AND subdomain="' . $subdomain->subdomain . '" );';
    $db->statement($query);
}

1 Ответ

0 голосов
/ 30 января 2020

Просто добавьте все эти запросы на обновление в переменную php ($ query) и выполните ее вне while l oop. как то так.

$nextWeek = $startDate;  // initialise while loop condition
$query = '';
while ($nextWeek <= $endDate) {
$lastWeek = $nextWeek;
$nextWeek = Carbon::parse($lastWeek)->addWeek(1)->format('Y-m-d');

// update activity date to week end date
$query .= 'UPDATE r_active_user_activities 
            SET week_end_date = "' . $nextWeek . '"
            WHERE (activity_date > "' . $lastWeek . '" 
                AND activity_date <= "' . $nextWeek . '"  
                AND subdomain="' . $subdomain->subdomain . '" );';
 }
$db->statement($query);
...