메뉴

소개

문서 관리 시스템에서 Archive 기능은 쉽게 찾아볼 수 있다. 나는 내 사이트(joinc)에서 아래와 같은 Archive Posts를 구현하기로 했다.

 Archive Posts

Archive 기준은 아래와 같다.

MONTH, YEAR 함수

MYSQL에서 제공하는 MONTH, YEAR 함수를 이용해서, 해당 시간의 년, 월 값을 가져올 수 있다.
SELECT MONTH('2022-01-22 05:00:32');
// +-----------------------------+
// | YEAR('2022-01-22 05:00:32') |
// +-----------------------------+
// |                           1 |
// +-----------------------------+
// 1 row in set (0.00 sec)

SELECT YEAR('2022-01-22 05:00:32');
// +-----------------------------+
// | YEAR('2022-01-22 05:00:32') |
// +-----------------------------+
// |                        2022 |
// +-----------------------------+
// 1 row in set (0.00 sec)

GROUP BY

이제 년, 월을 Group By 해주면 원하는 값을 얻을 수 있을 것이다.
select count(*), MONTH(createdate), YEAR(createdate) from page group by YEAR(createdate), MONTH(createdate);

// +----------+-------------------+------------------+
// | count(*) | MONTH(createdate) | YEAR(createdate) |
// +----------+-------------------+------------------+
// |       26 |                12 |             2015 |
// |     2976 |                 1 |             2016 |
// |       20 |                 2 |             2016 |
// |        7 |                 3 |             2016 |
// |       11 |                 4 |             2016 |
// ......

하지만 MONTH와 YEAR를 내림차순으로 정리해야 할 것 같다. MONTH와 YEAR 함수의 결과를 각각 order by desc 하면 된다.
select count(*), MONTH(createdate), YEAR(createdate) from page group by YEAR(createdate), MONTH(createdate) order by YEAR(createdate) desc, MONTH(createdate) desc;

// +----------+-------------------+------------------+
// | count(*) | MONTH(createdate) | YEAR(createdate) |
// +----------+-------------------+------------------+
// |        5 |                 1 |             2022 |
// |        2 |                12 |             2021 |
// |        2 |                11 |             2021 |
// |        6 |                10 |             2021 |
// |        6 |                 9 |             2021 |