2016-07-16 1 views
2

예를 들어 데이터의 시작일과 종료일이 있습니다. 2016-07-10로 start_date, 2016-07-25로 end_date. 두 개의 필드를 ZERO 값과 함께 추가하여이 두 날짜 사이의 모든 레코드를 원하지만 테이블에없는 날짜 레코드를 가져 오지 못합니다.날짜 기록이 두 기간 사이에 일치하지 않으면 0을 인쇄합니다.

SQL 바이올린 : http://sqlfiddle.com/#!9/c8dab/9

DDLs :

CREATE TABLE `bugs` (`bug_id` int(11) NOT NULL, `bug_date` date NOT NULL, `cf1` int(11) NOT NULL, `cf2` int(11) NOT NULL, `bug_status` varchar(200) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

INSERT INTO `bugs` (`bug_id`, `bug_date`, `cf1`, `cf2`, `bug_status`) VALUES (101, '2016-07-19', 3, 2, 'RESOLVED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (103, '2016-07-19', 2, 1, 'VERIFIED'), (103, '2016-07-19', 2, 1, 'VERIFIED'), (1363, '2016-07-19', 2, 1, 'VERIFIED'), (1352, '2016-07-19', 2, 1, 'VERIFIED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (102, '2016-07-22', 2, 2, 'CLOSED'), (103, '2016-07-22', 2, 2, 'CLOSED'), (103, '2016-07-22', 2, 2, 'CLOSED'), (102, '2016-07-19', 3, 2, 'NEW'), (102, '2016-07-19', 2, 1, 'REOPENED'), (102, '2016-07-19', 2, 1, 'CLOSED'), (102, '2016-07-19', 2, 1, 'VERIFIED'), (1363, '2016-07-19', 2, 1, 'VERIFIED'), (1352, '2016-07-19', 2, 1, 'VERIFIED'), (565, '2016-07-19', 2, 1, 'VERIFIED'), (398, '2016-07-22', 2, 2, 'CLOSED'), (565, '2016-07-22', 2, 2, 'CLOSED'), (9872, '2016-07-22', 2, 2, 'CLOSED'); 

검색어 :

SELECT DATE_FORMAT(convert_tz(bugs.bug_date,@@session.time_zone,'+05:30'), '%Y-%m-%d') as date, SUM(bugs.cf1 + bugs.cf2) as count FROM bugs 

('2016년 7월 10일'BETWEEN bugs.bug_date AND '2016년 7월 25일 ') GROUP BY bugs.bug_date;

실제 출력 :

date  | count 
2016-07-19 | 46 
2016-07-22 | 24 

예상 출력 :

date  | count 
2016-07-10 | 0 
2016-07-11 | 0 
2016-07-12 | 0 
2016-07-13 | 0 
2016-07-14 | 0 
2016-07-15 | 0 
2016-07-16 | 0 
2016-07-17 | 0 
2016-07-18 | 0 
2016-07-19 | 46 
2016-07-20 | 0 
2016-07-21 | 0 
2016-07-22 | 24 
2016-07-23 | 0 
2016-07-24 | 0 
2016-07-25 | 0 

내가 관련 게시물의 몇 겪었하지만 난 매우 구체적인 위해를 올리기 때문에 유사한 솔루션을 시도하여 진짜 대답을받지 못했습니다 누군가가 나를 제안 할 수 있다면 문제.

FYI .. 일부 게시물에 제안 된 것처럼 새 테이블을 만들 수 없으며 DB 액세스는 나를 위해 읽기 전용입니다.

제발 도와주세요. 감사합니다.

+0

편집 버튼이 있습니다. 일반적으로 데이터 표시 문제는 프레젠테이션 계층/응용 프로그램 수준 코드에서 가장 잘 처리됩니다. – Strawberry

+0

날짜에 대한 도우미 테이블을 만들 것입니다. 그러나 당신이 말하는 것처럼 당신은 할 수 없습니다. – Drew

답변

1

나는 쿼리 결과를 얻은 후에 실용적인 (중간 계층)을 통해이를 달성했다. -> 날짜 와이즈 쿼리 데이터를 배열에 추가한다.

for ($i=0; $i <= $noOfDays; $i++) { 
    $date = date('Y-m-d', strtotime($startDate . ' +' . $i . ' day')); 
    //this will add one day in startdate and add logic for $somevalue accordingly 
    $rows[] = array($date, $somevalue); 
}