Я использую следующий код для построения диаграммы Google, чтобы вытащить все записи в таблице MySQL, соответствующие номерам недель за год. В настоящий момент номера недели начинаются в воскресенье, и я хотел бы изменить это так, чтобы они начинались в понедельник, но я не уверен, как это сделать.
$i=1; while($i<=53) { $week_start = new DateTime(); $week_start->setISODate(2013,$i+1); $date_display = $week_start->format('j M Y'); $sessions = $wpdb->get_var($wpdb->prepare("SELECT Sum(Due) from patient_sessions WHERE Type='Session' AND Week(Date)='$i'")); $temp = array(); $temp[] = array('v' => (string) $date_display); $temp[] = array('v' => (string) $sessions); $rows[] = array('c' => $temp); $i++; }
ПЕРЕСМОТРЕННЫЙ КОД
$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'")); $i=1; while($i<=53) { $week_start = new DateTime(); $week_start->setISODate(2013,$i+1); $date_display = $week_start->format('j M Y'); $session_total = 0; $work_time_total = 0; $expense_total = 0; foreach ($sessions as $session) { if (date("W", strtotime($session->Date)) == $i) { $session_total = ($session_total+$session->Due); } } foreach ($work_times as $work_time) { if (date("W", strtotime($work_time->Date)) == $i) { $work_time_total = ($work_time_total+$work_time->Amount); } } foreach ($expenses as $expense) { if (date("W", strtotime($expense->Date)) == $i) { $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); $i++; }
WEEK(date[mode]); date = a date value. mode = An integer indicating the starting of the week.
По умолчанию ставка равна 0, которая равна воскресеньям, устанавливая это значение 1 в понедельник, 2 дня и т. Д.
week(date,1);
Чтобы он работал в вашем коде, вы должны иметь возможность изменить запрос:
"SELECT Sum(Due) FROM patient_sessions WHERE Type='Session' AND Week(Date,1)=$i"
Однако, я думаю, я мог бы сделать еще один шаг и использовать GROUP BY, чтобы сделать один вызов sql, а затем перебрать результаты;
"SELECT Week(Date,1), SUM(DUE) FROM patient_sessions WHERE Type='Session' GROUP BY Week(Date,1)"
Кроме того, вам может понадобиться использовать WEEK (Date, 2) в зависимости от того, как вы хотите обрабатывать недели, которые охватывают между годами.