2013-02-24 2 views
1

SQL 문에 모든 요일을 표시 한 다음 해당 날짜를 내 테이블의 데이터와 연결하려고합니다. 해당 날짜에 대한 데이터가 없으면 널 (null)로 표시해야합니다.데이터가 없어도 매월 매일 표시

내 표는 다음과 같습니다.

IN | OUT | EARN | DATE 
10 20 0.25 01.02.2013 
2 15 0.55 03.02.2013 
7 45 0.25 05.02.2013 
8 25 0.75 12.02.2013 

나는 당신이에 도움을 줄 수 제발 ...

결과가 월말이

IN | OUT | EARN | DATE 
10 20 0.25 01.02.2013 
0 0  0.00 02.02.2013 
2 15 0.55 03.02.2013 
0 0  0.00 04.02.2013 
7 45 0.25 05.02.2013 
0 0  0.00 06.02.2013 
0 0  0.00 07.02.2013 
0 0  0.00 08.02.2013 
0 0  0.00 09.02.2013 
0 0  0.00 10.02.2013 
0 0  0.00 11.02.2013 
8 25 0.75 12.02.2013 

모든 방법 같은 것을보고 싶지 난 할 수 있도록 보고서를 해결하십시오.

$sql = "SELECT * FROM stats WHERE date >= '".$month_start."' AND date <= '".$month_end."' AND pid={$pid}"; 
+0

'$ month_start'는 어떻게 생겼습니까? –

+0

'$ month_start = date ('Ym-01', strtotime ('this month')); ' –

답변

1

으로 반복 모든 일 동안이 방법으로

그리고 내 SQL 메신저 얻을 데이터 :

$start = new \DateTime('first day of this month'); 
$end = new \DateTime('first day of this month + 1 month'); 
$period = new \DatePeriod($start, new \DateInterval('P1D'), $end); 

foreach($period as $day){ 
    // here check if you have records with this date and print them, 
    // otherwise print default values 
    print $day->format('d.m.Y'); 
} 
+0

이 메신저 테이블을 이런 식으로 사용하는 방법을 모르십니까? foreach ($ data as $ gt) { echo ''.date ('M d, Y', strtotime ($ gt [ 'date'])). '. $ gt ['pView '].' '. $ gt ['uView '].' '. $ gt ['earn '].' '; }' –

+0

게시 하시겠습니까? –

2

이 시도 :

SELECT `t`.`IN`, `t`.`OUT`, `t`.`EARN`, `d`.`DATE` 
FROM `table` AS `t` 
RIGHT JOIN (
    SELECT @date := @date + 1 AS `DATE` 
    FROM `tbl31` 
    JOIN (SELECT @date := 0) AS `temp` 
    LIMIT 31 
) AS `d` 
ON `d`.`DATE`=`t`.`DATE` 

table이 테이블의 이름입니다.
tbl31은 30 개 이상의 행을 갖는 테이블입니다 (내용은 중요하지 않습니다).

MySQL을 사용할 때 (MySQL을 사용한다고 가정 할 때) 나는 더 좋은 방법을 모른다.

+0

물론 PHP로 더 쉽게 할 수 있습니다. –

+0

MySQL의 경우이 기능이 작동하지 않습니다. PHP로 무엇을 의미합니까? 당신은 나를 설명 할 수 있습니까 –

+0

하나의 트릭 포니의 대답은 일 동안 반복하는 방법을 보여줍니다. 나는 php에서 어떻게 완료되었는지를 보여줄 또 다른 답변을 게시 할 것이다. 그리고 내 쿼리를 실행하려면'tbl31'을 30 개 이상의 행이있는 테이블로 대체해야합니다. –

0

또한 달의 일을 반복 할 수 있습니다

/* 
    $r is something like: 
    $r = array(
     array(
      'IN' => '10', 
      'OUT' => '20', 
      'EARN' => '0.25', 
      'DATE' => '01.02.2013' 
     ), 
     array(
      'IN' => '2', 
      'OUT' => '15', 
      'EARN' => '0.55', 
      'DATE' => '03.02.2013' 
     ), 
     array(
      'IN' => '7', 
      'OUT' => '45', 
      'EARN' => '0.25', 
      'DATE' => '05.02.2013' 
     ), 
     array(
      'IN' => '8', 
      'OUT' => '25', 
      'EARN' => '0.75', 
      'DATE' => '12.02.2013' 
     ) 
    ); 
*/ 
$arr = array(); // the result array 
$period = new DatePeriod(
    new DateTime('first day of this month'), 
    new DateInterval('P1D'), 
    new DateTime('first day of next month') 
); 
$ri = 0; 
foreach ($period as $day) { 
    $i = ((int)$day->format('j')) - 1; 
    $date = $day->format('d.m.Y'); 
    $arr[$i] = array(
     'IN' => '0.00', 
     'OUT' => '0.00', 
     'EARN' => '0.00', 
     'DATE' => $date 
    ); 
    if (array_key_exists($ri, $r) && $r[$ri]['DATE'] == $date) { 
     $arr[$i] = $r[$ri]; 
     $ri++; 
    } 
} 

$의 편곡은 $ r을 같이 알고 있지만 달에 모든 일이 포함되어 있습니다.

관련 문제