어떻게 데이터를 얻기 위해서 다시 Mysql 에 대한 일이 없는 통계
문제
고 싶을 얻을 수의 등록에서 다시 기간(예를 들어 주),는 어렵지 않지만,나는지 궁금했을 경우 그것은 어쨌든 가능 MySQL 에서 반환하 제한하는 일이 없 등록한다.
예를 들어:데이터:
ID_Profile datCreate 1 2009-02-25 16:45:58 2 2009-02-25 16:45:58 3 2009-02-25 16:45:58 4 2009-02-26 10:23:39 5 2009-02-27 15:07:56 6 2009-03-05 11:57:30
SQL:
SELECT DAY(datCreate) as RegistrationDate, COUNT(ID_Profile) as NumberOfRegistrations FROM tbl_profile WHERE DATE(datCreate) > DATE_SUB(CURDATE(),INTERVAL 9 DAY) GROUP BY RegistrationDate ORDER BY datCreate ASC;
이 경우에는 결과가 될 것이다:
RegistrationDate NumberOfRegistrations 25 3 26 1 27 1 5 1
분명히 내가 누락 몇 일 사이입니다.현재 저는 이에 내 php 코드,하지만 내가 궁금하는 경우 MySQL 는 어떤 방법을 자동으로 0 을 반환한 일/의 행이 있습니다.이 것이 원하는 결과:
RegistrationDate NumberOfRegistrations 25 3 26 1 27 1 28 0 1 0 2 0 3 0 4 0 5 1
이 방법은 우리가 사용할 수 있습니다 MySQL 문제를 해결하기 위해 수에 관한 일에 달하는 대신 php 의 코드를 계산하는 각 개월이 얼마나 많은 일이 있기 때문 MySQL 는 이 기능을 구축합니다.
사전에 감사합니다
해결책
아니,그러나 하나의 문제를 해결할 수 있을 만들의 단 열이 테이블에 날짜가 기본 키로 날짜를 하였습니다.당신이 날짜가에서 초기 시작 지점을 통해 바로 일부는 멀리 떨어져 미래입니다.
지금,당신은 왼쪽 가입 통계 데이터에 대하여-그것을 당신을 얻을 것에 대해 널 그 일을 없는 데이터입니다.당신이 정말로 원하는 경우 제로 null 이 아닌 사용 IFNULL(colname,0)
다른 팁
감사 Paul 딕슨 저는 해결책을 발견했다.에 관심있는 사람들을 어떻게 해결이 읽어:
첫 번째 만들기 저장 프로시저는 내가 발견 어딘가에 채워 테이블과 함께 모든 날짜 올해합니다.
CREATE Table calendar(dt date not null); CREATE PROCEDURE sp_calendar(IN start_date DATE, IN end_date DATE, OUT result_text TEXT) BEGIN SET @begin = 'INSERT INTO calendar(dt) VALUES '; SET @date = start_date; SET @max = SUBDATE(end_date, INTERVAL 1 DAY); SET @temp = ''; REPEAT SET @temp = concat(@temp, '(''', @date, '''), '); SET @date = ADDDATE(@date, INTERVAL 1 DAY); UNTIL @date > @max END REPEAT; SET @temp = concat(@temp, '(''', @date, ''')'); SET result_text = concat(@begin, @temp); END call sp_calendar('2009-01-01', '2010-01-01', @z); select @z;
다음 변경하는 쿼리를 추가하는 왼쪽에 참:
SELECT DAY(dt) as RegistrationDate, COUNT(ID_Profile) as NumberOfRegistrations FROM calendar LEFT JOIN tbl_profile ON calendar.dt = tbl_profile.datCreate WHERE dt BETWEEN DATE_SUB(CURDATE(),INTERVAL 6 DAY) AND CURDATE() GROUP BY RegistrationDate ORDER BY dt ASC
그리고 우리 모두 끝났습니다.
감사합니다 모두에 대한 빠른 응답과 솔루션입니다.