반응형

PHP로 목록 프로그램을 코딩 시 검색 폼에 있는 날짜가 월로 검색을 해야 하는 SELECT 콤보 박스 시 사용하는 예제입니다.

 

아래 소스에서는 날짜 검색을 위해서 월의 시작일이 1일까지를 포함해서 값을 셋팅하였습니다.

  <form class="form-inline" action="<?php echo $_SERVER['SCRIPT_NAME']?>" method="post" style="display:inline;">
    <select name="search_month" class="form-control" required>
      <option value="20200601"<?=$search_month=="20200601"?" selected":""?>>2020년 06월</option>
      <option value="20200701"<?=$search_month=="20200701"?" selected":""?>>2020년 07월</option>
      <option value="20200801"<?=$search_month=="20200801"?" selected":""?>>2020년 08월</option>
      <option value="20200901"<?=$search_month=="20200901"?" selected":""?>>2020년 09월</option>
      <option value="20201001"<?=$search_month=="20201001"?" selected":""?>>2020년 10월</option>
      <option value="20201101"<?=$search_month=="20201101"?" selected":""?>>2020년 11월</option>
      <option value="20201201"<?=$search_month=="20201201"?" selected":""?>>2020년 12월</option>
      <option value="20210101"<?=$search_month=="20210101"?" selected":""?>>2021년 01월</option>
      <option value="20210201"<?=$search_month=="20210201"?" selected":""?>>2021년 02월</option>
      <option value="20210301"<?=$search_month=="20210301"?" selected":""?>>2021년 03월</option>
      <option value="20210401"<?=$search_month=="20210401"?" selected":""?>>2021년 04월</option>
      <option value="20210501"<?=$search_month=="20210501"?" selected":""?>>2021년 05월</option>
    </select>

    <button type="submit" class="btn btn-default">검색</button>
  </form>

 

 

첫 페이지 로딩 시 조회할 검색월이 없기에 초기값 설정을 합니다.

 

현재 날짜의 연도와 월을 가져옵니다.

$searchYear  = (int)date('Y');
$searchMonth = (int)date('m');

 

쿼리문에 넣을 날짜를 YYYYMMDD 포맷으로 셋팅합니다.

$search_month = date("Ymd", mktime(0, 0, 0, $searchMonth, 1, $searchYear));

 

MySQL에서 조회 조건을 현재월을 기준으로 1개월 전의 말일, 현재월의 말일의 다음날로 셋팅을 합니다.

예시를 들면 오늘이 7월 15일일 때, 위의 쿼리문을 보면 6월 30일 AND 8월 1일이 됩니다.

날짜 뒤의 시간은 00:00:00 으로 자동으로 만들어지 때문에 7월 1일 ~ 7월 31일 까지로 데이터를 가져옵니다.

즉, 각 월별로 데이터 조회가 가능하게 되는 거죠.

WHERE reg_date BETWEEN LAST_DAY(STR_TO_DATE($search_month,'%Y%m%d') - INTERVAL 1 MONTH)
  AND LAST_DAY(STR_TO_DATE($search_month,'%Y%m%d')) + INTERVAL 1 DAY

 

PHP, MySQL 월별로 데이터를 조회하는 방법 - date, mktime, LAST_DAY, INTERVAL

앞에서 설명 드린 내용을 조합한 전체 내용입니다.

<?php

  // 검색월
  $search_month = $_REQUEST['search_month'];

  if ( empty($search_month) ) {
    // 현재 날짜의 연, 월을 저장
    $searchYear  = (int)date('Y');
    $searchMonth = (int)date('m');

    // 현재월,일까지 설정
    // 예시 : 20200701
    $search_month = date("Ymd", mktime(0, 0, 0, $searchMonth, 1, $searchYear));
  }

  $query = "SELECT * FROM [테이블명]
             WHERE reg_date BETWEEN LAST_DAY(STR_TO_DATE($search_month,'%Y%m%d') - INTERVAL 1 MONTH)
               AND LAST_DAY(STR_TO_DATE($search_month,'%Y%m%d')) + INTERVAL 1 DAY";
?>
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <form class="form-inline" action="<?php echo $_SERVER['SCRIPT_NAME']?>" method="post" style="display:inline;">
    <select name="search_month" class="form-control" required>
      <option value="20200601"<?=$search_month=="20200601"?" selected":""?>>2020년 06월</option>
      <option value="20200701"<?=$search_month=="20200701"?" selected":""?>>2020년 07월</option>
      <option value="20200801"<?=$search_month=="20200801"?" selected":""?>>2020년 08월</option>
      <option value="20200901"<?=$search_month=="20200901"?" selected":""?>>2020년 09월</option>
      <option value="20201001"<?=$search_month=="20201001"?" selected":""?>>2020년 10월</option>
      <option value="20201101"<?=$search_month=="20201101"?" selected":""?>>2020년 11월</option>
      <option value="20201201"<?=$search_month=="20201201"?" selected":""?>>2020년 12월</option>
      <option value="20210101"<?=$search_month=="20210101"?" selected":""?>>2021년 01월</option>
      <option value="20210201"<?=$search_month=="20210201"?" selected":""?>>2021년 02월</option>
      <option value="20210301"<?=$search_month=="20210301"?" selected":""?>>2021년 03월</option>
      <option value="20210401"<?=$search_month=="20210401"?" selected":""?>>2021년 04월</option>
      <option value="20210501"<?=$search_month=="20210501"?" selected":""?>>2021년 05월</option>
    </select>

    <button type="submit" class="btn btn-default">검색</button>
  </form>
</body>
</html>

 

2019/12/30 - [유용한 활용팁] - MySQL 설정된 사용기간에 따라서 데이터 조회하는 방법

 

MySQL 설정된 사용기간에 따라서 데이터 조회하는 방법

MySQL에서 설정된 사용기간에 따라서 데이터를 조회하는 방법입니다. 1. 사용기간 설정을 위해 아래와 같이 사용시작일과 사용종료일 칼럼을 만듭니다. ALTER TABLE TABLE ADD ( use_start_dt DATE

han288.tistory.com

2019/12/26 - [유용한 활용팁] - MySQL 현재월, 현재월 기준 1개월, 2개월 조회 방법, 날짜 칼럼 월 조회 방법

 

MySQL 현재월, 현재월 기준 1개월, 2개월 조회 방법, 날짜 칼럼 월 조회 방법

MySQL에서 현재월 및 현재월 기준 1개월, 2개월 조회 방법입니다. 조회 칼럼이 String으로 01월 ~ 12월로 데이터가 저장 되었을 때 처리하는 방법입니다. 데이터를 조회할 때는 일반적

han288.tistory.com

 

반응형

+ Recent posts