- ベストアンサー
時間を比較してデータを取り出す方法
- データベース内の時間と現在の時間を比較して、条件を満たすデータを抽出する方法について説明します。
- 具体的には、現在時間とデータベース内の時間の差が2週間以内であるデータを取得する方法を検討しています。
- ORDER BYを使用してデータの比較と抽出を行うことができますが、具体的なクエリの書き方が分からないため、ご教示いただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SQL文の ORDER BY は、No.1のご回答にあるように、抽出したデータをソートするもので、抽出条件ではありません。 文法で WHERE の後ろに記述するので、もしかしたら、条件文の一部だと誤解されているのでしょうか。 PHPで現在の日時から2週間前は次の方法で取得できます。 date("Y/m/d H:i:s",strtotime("-14 day")) これでは、厳密に14日×24時間前の日時になってしまい、1秒おきに抽出される対象が変わってきますので、もしその日の間中は同じデータ(時間を無視して14日前の日付)を取得するのでしたら工夫が必要です。 それは質問者様の方で試験していただくとして、もしかすると書式が "Y/m/d" にするだけでいいのかも知れません。 取得したものを $date に代入しておいたとして、PHPでSQL文を作るとこうなります。 $query_Recordset1 = "SELECT * FROM database WHERE date => '$date'"; 厳密には取得した日時によって > か => の不等号は微妙に変わってくるかも知れません。 抽出したデータを日時の小さい順に並べ替えたいのであれば、このように。 $query_Recordset1 = "SELECT * FROM database WHERE date => '$date' ORDER BY date"; 大きい順なら、このように。 $query_Recordset1 = "SELECT * FROM database WHERE date => '$date' ORDER BY date DESC"; ここでようやく ORDER BY の登場です。
その他の回答 (2)
- tom233
- ベストアンサー率17% (61/352)
追加、それとこれPHPの質問ではなくてDBの質問でしょ。 板違い。
- tom233
- ベストアンサー率17% (61/352)
そもそもORDER BYは並び替えにつかうもので検出に使う物ではない。 いったいどういう意図でORDER BYでできるとおもったのか? http://www.google.co.jp/search?hl=ja&safe=off&q=SQL%E3%80%80%E6%97%A5%E4%BB%98%E6%AF%94%E8%BC%83&lr= http://www.google.co.jp/search?hl=ja&safe=off&q=SQL%E3%80%80%E6%97%A5%E4%BB%98%E9%96%A2%E6%95%B0&lr= 検索すれば情報は日付がらみの関数などゴロゴロ出てくる。 後、根本的な事だけど使っているDBそのものを秘密にしている理由は? DBによって実装されている関数が違ったりする。 (SQLとしての標準規格はあるが関数などの差は激しい。)
お礼
教えていただいた方法で無事データを取得することが出来ました。 今回の抽出対象データは14日前で時間はパラメータに取り入れないつもりなので、date("Y/m/d",strtotime("-14 day"))で取り出しました。 取り出したデータ全てが、完全に該当するかは未確認ですが、DB内の該当データ件数と比較するとほぼ合っているようですが、これから時間をかけて見直したいと思います。 ありがとうございました。 PS: >文法で WHERE の後ろに記述するので、もしかしたら、条件文の一部だと誤解されているのでしょうか。 WHEREでデータを取り出し、ORDER BYで並べる時にデータを振り分けるものと、基本的な部分を勘違いしていました。