MySQL – php – 解決如查詢2012年2月有開展的展覽有哪些的方法

主要解決

  • 指定日期,查詢包含在資料的開始日期與結束日期。
  • 當指定 N年N月,查詢有哪些資料是在這期間的時候。
  • 例如:查詢2012年2月有開展的展覽有哪些。

情況範例

若指定 2012-02 做查詢,符合的條件會有

  • 2012-02-01  ~ 2012-07-01 // 該月第一天是符合的
  • 2012-02-最後一天 ~ 2012-07-01 // 該月最後一天也算符合條件。但是如2月的最後一天是幾號呢?交由函式自動判斷

  • 2012-01-01 ~2013-01-01 // 該月之前的月份是符合的
  • 2011-01-31 ~ 2013-01-01 // 就算跨了年份也是符合的

 

SQL 條件範例

查詢輸入

$year = "2012"; //搜尋的年份
$month = "2"; //搜尋的月份

資料表欄位

  • “starttime” :紀錄開始日如 2012-01-01 08:00:00 或 2012-01-01
  • “endtime”  :記錄結束日

WHERE 條件

  1. 先取得指定年月份,添加第一天,再轉為戳記( 函式為 UNIX_TIMESTAMP )
  2. 取得 開始日 的第一天,先格式化為年月日,再轉為戳記
  3. 取得 結束日 並查詢最後一天( 函式為 last_day ),再轉為戳記
  4. 使用 between A and B
WHERE UNIX_TIMESTAMP('{$year}-{$month}-01') between 
      UNIX_TIMESTAMP(DATE_FORMAT(starttime, '%Y-%m-01')) and UNIX_TIMESTAMP(last_day(endtime)) ";

 

結論

把『指定日期、開始日期』,都轉成月份的第一天,再來比對會比較方便。這樣可以解決查詢『2月』時,開始日是2月28日也涵蓋進來--因為兩個都轉成2月1日了。

發表迴響