スポンサードリンク

指定した期間日付でマーカーを表示。MySQL+PHP+select+DATE_FORMAT

例えば毎年7月になったらあるマーカーを表示」させる場合でなく、今度は7月と8月の場合は? さらに、7/15から8/15のカレンダーデイでマーカーを表示させる場合は? イベント開催中のみマーカー(アイコン)を表示させたいなと・・・・ 考え方は次のような感じかな。 1)期間を指定したいので、Date型フィールドを2つ作成。

  • 開始日:datefrom
  • 終了日;dateto

2)select文は

  • 例えば、あるアイコンを期間(月日)限定で表示させたい。期間は、5月5日~5月25日としたい。
  • Date型フィールドは2つ。datefromに5月5日、datetoに5月25日を指定
  • 従って、今日の「月日」が、datefromより大きく、datetoより小さい間だけ、マーカーを表示する。

3)ではどう記述すればよいのか? MySQLデータフィールドには、datefromとdatetoを登録しているので、上記の考え方を反転。

  • datefromが今日の「月日」より小さい。datetoが今日の日付より大きい間だけ、マーカーを表示する。つまり・・・・・
  • 「datefrom」の月日 <= 今日の月日
  • datefromの月日 → DATE_FORMAT(datefrom, ‘%m%d’)
  • 今日の月日 → の月日
  • 今の月日 → DATE_FORMAT(NOW(), ‘%m%d’) -> ‘0724’

こうなるネ

DATE_FORMAT(datefrom, ‘%m%d’) <= DATE_FORMAT(NOW(), ‘%m%d’)

次は、

  • 「dateto」の月日 >= 今日の月日

となるので

DATE_FORMAT(dateto, ‘%m%d’) >= DATE_FORMAT(NOW(), ‘%m%d’)

上記をAND条件にする

DATE_FORMAT(datefrom, ‘%m%d’) <= DATE_FORMAT(NOW(), ‘%m%d’) and DATE_FORMAT(dateto, ‘%m%d’) >= DATE_FORMAT(NOW(), ‘%m%d’)

試してみるとOK。これでバッチやろ・・・・・ところがスキー場のアイコン。
そう、冬季のイベントの場合、12月15日~3月20日なんてな場合、上記だとダメ。表示されない。そりゃそうだ。
大なり小なりは、1~12の間でしか使えないのだから。

うーん

しかたない。これ以上考えるのも時間が無いので・・・・
Date型フィールドをペアをもう一組ついか。

  • datefrom2とdateto2・・・・安易だが。

したがって、年末年始を挟んで期間を設定する場合。

  • フィールドdatefromに12/15、datetoに12/31
  • フィールドdatefrom2に1/1、datetoに3/20

これで、12/15~3/20をカバーすることに。

さらにDateフィールドが「0000-00-00」になっているテーブルデータには、or条件で

or DATE_FORMAT(dateto, ‘%m%d’) = 00-00″;

を追加。

うんで完成したselect文は・・・・

$query = “SELECT * FROM ASOBIBA WHERE DATE_FORMAT(datefrom2, ‘%m%d’) <= DATE_FORMAT(NOW(), ‘%m%d’) and DATE_FORMAT(dateto2, ‘%m%d’) >= DATE_FORMAT(NOW(), ‘%m%d’) or DATE_FORMAT(datefrom, ‘%m%d’) <= DATE_FORMAT(NOW(), ‘%m%d’) and DATE_FORMAT(dateto, ‘%m%d’) >= DATE_FORMAT(NOW(), ‘%m%d’) or DATE_FORMAT(dateto, ‘%m%d’) = 00-00″;

誰かスマートな案があれば、コメントを残していって下さいますよう宜しくお願い致します。

スポンサードリンク

Related Posts
  1. 参考になりました。ありがとうございます!!
    下記のソースでdbから望みの期間のデータのみ抽出できました。
    たぶん大丈夫だと思います・・・

    //現在の日付をを$dateという変数に20110102の形で代入する
    $date=date(‘Ymd’);

    //現在よりupload_dateが過ぎた場合抽出して、現在よりdelete_dateが過ぎた場合抽出しない
    $recordSet=mysql_query(“SELECT * FROM ad WHERE upload_date =$date ORDER BY upload_date DESC”)
    or die(mysql_error());

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">