「例えば毎年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″;
誰かスマートな案があれば、コメントを残していって下さいますよう宜しくお願い致します。
関連記事一覧
スポンサードリンク
参考になりました。ありがとうございます!!
下記のソースで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());