Оптимизация итерации через массив с использованием foreach-циклов

Я выполнял запросы MySQL в циклах foreach до сих пор, но теперь понимаю, что более эффективно сначала запускать запрос, а затем выполнять итерацию по массиву. Мне интересно, могу ли я оптимизировать приведенный ниже код – который использует данные в 3 таблицах для построения графика Google – далее. Возможно ли, например, добавить предложение where в циклы foreach, чтобы мне не нужно включать предложение if в каждый цикл?

$begin = new DateTime(date('Ym-d', strtotime('-28 days'))); $end = new DateTime(date('Ym-d', strtotime('+1 day'))); $interval = DateInterval::createFromDateString('1 day'); $period = new DatePeriod($begin, $interval, $end); $sessions = $wpdb->get_results($wpdb->prepare("SELECT Due,Date from patient_sessions WHERE Type='Session'")); $work_times = $wpdb->get_results($wpdb->prepare("SELECT Amount,Date from work_times")); $expenses = $wpdb->get_results($wpdb->prepare("SELECT Amount,Date from expenses WHERE Client='Psychotherapy'")); foreach ( $period as $dt ) { $session_total = 0; $work_time_total = 0; $expense_total = 0; $date = $dt->format("Ymd"); $date_display = $dt->format("D j M"); foreach ($sessions as $session) { if (substr($session->Date,0,10) === $date) { $session_total = ($session_total+$session->Due); } } foreach ($work_times as $work_time) { if ($work_time->Date === $date) { $work_time_total = ($work_time_total+$work_time->Amount); } } foreach ($expenses as $expense) { if ($expense->Date === $date) { $expense_total = ($expense_total+$expense->Amount); } } $balance = ($session_total + $work_time_total - $expense_total); $temp = array(); $temp[] = array('v' => (string) $date_display); $temp[] = array('v' => (string) $balance); $rows[] = array('c' => $temp); }