時間を比較してデータを取り出す方法

このQ&Aのポイント
  • データベース内の時間と現在の時間を比較して、条件を満たすデータを抽出する方法について説明します。
  • 具体的には、現在時間とデータベース内の時間の差が2週間以内であるデータを取得する方法を検討しています。
  • ORDER BYを使用してデータの比較と抽出を行うことができますが、具体的なクエリの書き方が分からないため、ご教示いただけると助かります。
回答を見る
  • ベストアンサー

時間を比較してデータを取り出す

とあるデータベースの中から、現在の時間とデータベース内の時間を比較して、データを抽出することは出来ないでしょうか? 具体的には、下記の様なデータベースから現在時間とdate内の時間を比較してデータを抽出するというものです。 ORDER BYを使って比較して取り出しすることは可能でしょうか? ※現在時間との差が2週間以内である事を条件で時間を比較する  date内の数値はデータベース内そのままのデータ形式です。  △:半角スペース ID  name    date 1  ABC  2008/04/25△13:29 2  EFG  2007/12/10△10:34 :   :      : :   :      : 考えてみましたが良く分かりませんでした。 $query_Recordset1 = "SELECT * FROM database WHERE date ORDER BY ???????"; 分かる方がいらっしゃいましたら是非教えてくださいm(__)m PHPは超初心者です。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5640)
回答No.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 の登場です。

rashi3987
質問者

お礼

教えていただいた方法で無事データを取得することが出来ました。 今回の抽出対象データは14日前で時間はパラメータに取り入れないつもりなので、date("Y/m/d",strtotime("-14 day"))で取り出しました。 取り出したデータ全てが、完全に該当するかは未確認ですが、DB内の該当データ件数と比較するとほぼ合っているようですが、これから時間をかけて見直したいと思います。 ありがとうございました。 PS: >文法で WHERE の後ろに記述するので、もしかしたら、条件文の一部だと誤解されているのでしょうか。 WHEREでデータを取り出し、ORDER BYで並べる時にデータを振り分けるものと、基本的な部分を勘違いしていました。

その他の回答 (2)

  • tom233
  • ベストアンサー率17% (61/352)
回答No.2

追加、それとこれPHPの質問ではなくてDBの質問でしょ。 板違い。

  • tom233
  • ベストアンサー率17% (61/352)
回答No.1

そもそも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としての標準規格はあるが関数などの差は激しい。)

関連するQ&A

  • データを昇順に並べるには

    $query = "select id,name,jyusyo,kakaku,gazou,link from kensaku where"; と書いてDBから正常にデータが取得できています。これを (1)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku"; (2)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; (3)$query = "select id,name,jyusyo,kakaku,gazou,link from kensaku [where where_definition] order by kakaku";(このやり方はPHPプロというサイトで教えてもらいました) これら三つどれを書いてもエラーになります。どうしたら良いでしょうか??

    • ベストアンサー
    • PHP
  • MYSQLで、今日まで過去30日間のデータの抽出の仕方について

    よろしくお願いいたします。 趣味と勉強を兼ねてデータベースのサイトを作っています。 http://www.game-minzoku.jp/index.php ↑このようなゲームソフトのデータベースサイトを作っていて、 今日までの過去30日間に発売したデータだけを抽出して表示させたいと思っています。 「hatsubai」というフィールドに『2009-7-30』というようにデータを入れてあります。  調べた知識で、 ---------------------------------------------------------------- $sql = "select * from ○○ where TO_DAYS(NOW()) - TO_DAYS(hatsubai) < 30 order by hatsubai desc;"; ---------------------------------------------------------------- と書いてみて、一応過去30日間のデータを抽出できたと思っていたのですが、今日(現在2009/7/6)より先のデータも出てきてしまっている感じです。 今日(現在2009/7/6)より先のデータはここでは抽出しないようにするにはどのように記述すればよいのでしょうか? またご不明な点や言葉足らずな点などあればビシビシおっしゃってください。 よろしくお願いいたします!

    • ベストアンサー
    • MySQL
  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • MySQL
  • 時間の比較をしたい

    たとえば データ(1) A:11時 B:13時 データ(2) A:18時 B:0時 データ(3) A:23時 B:3時 現在時刻が12時の場合 データ(1)が抽出 現在時刻が17時なら データ(2)(3)が抽出 現在時刻が0時なら データ(2)(3)が抽出 のように 現在時刻が期間AからBに該当する場合に データがHITするような SQLを作りたいのですが うまくいきません where 'now' between A and B; ではうまくいきませんでした 何か良いSQLはありませんか? ちなみにTIME型データです それ以外のデータ型でもいいです 希望通りの動きをするなら・・・ よろしくお願いします

  • 重複クエリを使ったデータ削除

    お尋ねします。 データをダブって入力してしまい、重複クエリを使ってダブったデータを抽出したのですが、ダブっているデータの片方だけを削除する方法がわかりません。 削除クエリにしてWhere条件式を書くのだろうと思いますがどう書けばいいのでしょうか? たとえば、日付、金額、入金(または出金)の3つのデータがダブっているクエリ抽出結果においては、各フィールドのWhere条件式にどう記述すればいいのでしょうか? 教えてください。

  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP
  • データの比較

    SQLserver2005を使用ています.     ----------------- 日付 値 6/9 13:10 158 ・・・1 6/9 13:00 154 ・・・2 6/9 12:50 40 ・・・3 6/9 12:40 158 ・・・4 6/9 12:30 37 ・・・5 6/8 08:45 152 ・・・6 6/8 08:40 159 ・・・7 ----------------- というデータの中から Aの一つ前の時間のBと比較して値が100以上少なく 変化していたらそのAのデータを抽出. 例として, 3は4に比べ-100以上変化しているので抽出. 5は6に比べて-100変化しているが, 日付が違うので抽出しない. という条件を作りたいのですが, いまいちピンと来ないのでご教示いただけると幸いです. よろしくお願いします.

  • ★Mysql 同じ条件で●●から同じ数だけ抽出!

    SELECT * FROM `table` WHERE `abc`=1 and `def`=3 and GROUP BY ●● order by rand(); この条件なら、●●が1件ずつ計30件が抽出されます。 が、 私がやりたいのは、●●から3件ずつで、 3×30=90件 抽出したいです。 一文でできるのでしょうか? 初心者ですみません。 よろしくお願いします。

  • MySQLのDatetime型の検索方法

    MySQLのDatetime型で 時間部分が00:00:00のデーターだけを抽出する方法を教えてください。 MySQLのデータ(列:Datetime型) 2011-12-01 00:00:00 2011-12-01 20:15:45 2011-12-01 20:46:45 2011-12-02 00:00:00 2011-12-02 11:11:11 2011-12-03 22:22:22 2011-12-04 00:00:00 このようなデータの中から時間部分が「00:00:00」のものを抽出したいと思います。 求める結果は 2011-12-01 00:00:00 2011-12-02 00:00:00 2011-12-04 00:00:00 です。 期間で抽出するのであれば SELECT * FROM `テーブル名` WHERE date>='2012/12/05 00:00:00' AND date<='2012/12/07 23:59:59' のようなクエリで良いと思うのですが、「00:00:00:」が含まれるものだけを抽出しようと思うとうまくいきません。 LIKE 00:00:00 でできるかもしれないと思いましたがダメでした。

    • ベストアンサー
    • MySQL
  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう