- ベストアンサー
検索条件の日付の型
お力を貸してください。 データベースから現在年月日のものだけ抽出したいのですが、 日付の型が合わないからなのか、抽出できません。 dt_fromカラムには表示開始日時 dt_toカラムには表示終了日時が入ってます。 $from = date('Y-m-d 00:00:00'); $to = date('Y-m-d 23:59:59'); $sql = "SELECT * FROM data WHERE dt_from = $from AND dt_to = $to "; どこかおかしい点があればご指摘ください。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
う~ん・・・一般的には・・・ 表示開始日時が2007-09-01 00:00:00で 表示終了日時が2007-09-10 23:59:59なら 普通2007-09-04は表示されるのが妥当だとおもいますけど? もし万が一当日しか有効でなければ、最初から 表示開始日時が2007-09-01 00:00:00の場合の 表示終了日時は2007-09-01 23:59:59となっているはずでは? まぁそれはそうと・・・前回の回答でも書きましたが とりあえずdt_fromやdt_toがちゃんとdatetime型であれば 変数をクォーテーションでくくっても解決しませんか? ×WHERE dt_from = $from AND dt_to = $to ○WHERE dt_from = '$from' AND dt_to = '$to'
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
$fromや$toをクォーテーションでくくる必要があるような・・・ 現在の日時がdt_fromとdt_toの間にあればよいならこんな感じ? $sql = "SELECT * FROM data WHERE CONCAT(CURDATE(),' ',CURTIMT()) BETWEEN `dt_from` AND `dt_to` ";
補足
わかりづらい質問文ですみませんでした。 BETWEE ・・・ AND ・・・ を使うと 例えば 表示開始日時が2007-09-01 00:00:00 表示開始日時が2007-09-10 23:59:59 などのいらないデータも抽出してしまいます。 欲しいデータは 表示開始日時が2007-09-04 00:00:00 表示開始日時が2007-09-04 23:59:59 という期間が一日のデータです。
お礼
’’これでいけました。 ``と勘違いしてました。申し訳ないです。 私自身が "" と '' と `` の意味をちゃんと 把握してないからこういうことになるのですね。。。 どうもありがとうございました。感謝しています。
補足
一般的にはそうなのかもしれませんが、期間が一日のものだけ 抽出してくれというクライアントの要望なので仕方ないです。 yambejpさんから指摘頂いた '' でくくってみたのですが、 はやり結果は同じでした。 もう少しやってみます。 ちなみに$from = date('Y-m-d 00:00:00')とした場合 型はdatetimeになってるってことでよろしいんでしょうか。 yambejpさんには以前もお世話になってます。 毎度すみません、ありがとうございます。