월별로 출력하고 싶습니다.
본문
2020-03-07
2020-05-07
2020-07-07
이렇게 db에 날짜와 수량으로 저장되어 있습니다.
for문을 사용하니 저렇게 3개만 출력되고 있는데
빠진 달은 수량을 0으로 출력 하고 1~12월 까지 한번에 출력할수 있는 방법이 있을까요?
답변 3
질문을 할때는 남이 알아먹을 수 있게 필드명까지 명시를 해서 질문 하세요
게시판이겠죠?
등록시 여분필드에 월별로 저장 되도록 만드세요( 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++) 문으로 출력하면 되겠습니다
테이블 상세구조나 데이터 샘플이 없기 때문에
임의로 가상데이터를 만들고 추출하는 샘플입니다.
연도 범위 안에서 검색하고
없는 데이터는 가상으로 만들고 조인을 하는 방식입니다.
실제 테이블 데이터는 tbl 에 매칭되어야 하는 부분임을 인지하고
대략적인 확인을 하면 될것 같습니다.
답변과는 별개로 쿼리로 가공하는 대신
어플리케이션에서 코드로 가공하는 방법도 추천드립니다.
-- 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
;
달력?에 해당하는 날짜를 저장한 테이블과
left join으로 처리하면 됩니다.