다음 주 코드를 사용하여 1 년 동안의 주 숫자에 해당하는 MySQL 테이블의 모든 항목을 가져 오기 위해 Google 차트를 작성합니다. 그 순간에 주 숫자가 일요일에 시작되고 월요일에 시작할 수 있도록이 번호를 변경하려고합니다. 그러나 어떻게해야할지 모르겠습니다.PHP/MySQL에서 Week (Date)를 사용할 때주의 첫날을 Monday로 어떻게 설정합니까?
$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++;
}
REVISED CODE
$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++;
}
이것은 매우 비효율적 인 방법입니다. 한 번의 클릭만으로 모든 결과를 가져온 다음 결과 집합을 반복합니다. – Strawberry
@Strawberry 당신이 옳을 수도 있습니다. 'SELECT * from patient_sessions'를 사용하고 루프를 사용하여 모든 결과를 확인 하시겠습니까? 나는 그래프가 느리게로드되는 것을 알아 챘다. 아마도 이것이 이유일까요? 일반적으로 위와 같은 방식으로 PHP 루프가 쿼리를 사용하는 것보다 빠르게 작동합니까? – Nick
일반적으로 (물론 예외가 있습니다.) 가능한 한 데이터베이스 왕복 횟수를 줄이고 싶습니다. 귀하의 전략은 53 회의 여행을 만듭니다. 내 것은 1을 만듭니다. 그러나 문제는 "SELECT *"가 아닙니다. 그것은 "Where Week (Date) = '$ i'"입니다. GROUP BY를 참조하십시오. – Strawberry