월별로 출력하고 싶습니다. 채택완료

2020-03-07

2020-05-07

2020-07-07

 

이렇게 db에 날짜와 수량으로 저장되어 있습니다.

 

for문을 사용하니 저렇게 3개만 출력되고 있는데

빠진 달은 수량을 0으로 출력 하고 1~12월 까지 한번에 출력할수 있는 방법이 있을까요?

답변 3개

채택된 답변
+20 포인트

질문을 할때는 남이 알아먹을 수 있게 필드명까지 명시를 해서 질문 하세요

게시판이겠죠?

등록시 여분필드에 월별로 저장 되도록 만드세요( 2023-04 형식)

현재 등록된 게시물은 리스트에서 다음 코드를 넣어서 한번 호출하고 코드를 삭제 하세요

sql_query("update $write_table set wr_1=LEFT(날짜필드, 7) ");

 

월별 카운트

$yy= date("Y", G5_SERVER_TIME); $mon1=$yy.'-01'; $mon12 = $yy.'-12';

$qq = sql_query("select SUBSTRING(wr_1, 6, 2) as mon, sum(수량필드) as cnt from $write_table where wr_1 between '$mon1' and '$mon12' group by wr_1");

while($row=sql_fetch_array($qq)) $mlist[1*$row['mon']] = $row['cnt'];

 

print_r($mlist); //<--- for($i=1; $i<13; $i++) 문으로 출력하면 되겠습니다

 

 

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

해결했습니다. 감사합니다 ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

달력?에 해당하는 날짜를 저장한 테이블과

left join으로 처리하면 됩니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

테이블 상세구조나 데이터 샘플이 없기 때문에

임의로 가상데이터를 만들고 추출하는 샘플입니다.

 

연도 범위 안에서 검색하고 

없는 데이터는 가상으로 만들고 조인을 하는 방식입니다.

 

실제 테이블 데이터는 tbl 에 매칭되어야 하는 부분임을 인지하고

대략적인 확인을 하면 될것 같습니다.

 

답변과는 별개로 쿼리로 가공하는 대신

어플리케이션에서 코드로 가공하는 방법도 추천드립니다.

 

Copy
-- SET @y = '2021';
SET @y = '2020';

 

SELECT 
     CONCAT(@y, '-', tmp.m) col_m 
    ,SUM(CASE WHEN tbl.quantity_column IS NULL THEN 0 ELSE tbl.quantity_column END) col_qty 
FROM
    (
        SELECT '01' m FROM DUAL UNION ALL 
        SELECT '02' m FROM DUAL UNION ALL 
        SELECT '03' m FROM DUAL UNION ALL 
        SELECT '04' m FROM DUAL UNION ALL 
        SELECT '05' m FROM DUAL UNION ALL 
        SELECT '06' m FROM DUAL UNION ALL 
        SELECT '07' m FROM DUAL UNION ALL 
        SELECT '08' m FROM DUAL UNION ALL 
        SELECT '09' m FROM DUAL UNION ALL 
        SELECT '10' m FROM DUAL UNION ALL 
        SELECT '11' m FROM DUAL UNION ALL 
        SELECT '12' m FROM DUAL 
    ) tmp 
    LEFT OUTER JOIN 
    (
        SELECT '2020-03-07' date_column, 1 quantity_column FROM DUAL UNION ALL 
        SELECT '2020-05-07' date_column, 2 quantity_column FROM DUAL UNION ALL 
        SELECT '2020-05-11' date_column, 3 quantity_column FROM DUAL UNION ALL 
        SELECT '2020-07-07' date_column, 4 quantity_column FROM DUAL UNION ALL 
        SELECT '2021-03-07' date_column, 5 quantity_column FROM DUAL UNION ALL 
        SELECT '2021-05-07' date_column, 6 quantity_column FROM DUAL UNION ALL 
        SELECT '2021-05-11' date_column, 7 quantity_column FROM DUAL UNION ALL 
        SELECT '2021-07-07' date_column, 8 quantity_column FROM DUAL
    ) tbl ON 
         -- SUBSTRING(tbl.date_column, 1, 4) = '2020'
            SUBSTRING(tbl.date_column, 1, 4) = @y
        AND SUBSTRING(tbl.date_column, 6, 2) = tmp.m 
GROUP BY 
    tmp.m 
;
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고