2017-11-21 18 views
1

私は新しい注文を作成し、NOW + 15分をデータベースに挿入するPHPスクリプトを持っています。MySQL select timenow> database time

15分が経過すると、ユーザーは注文ページにアクセスできなくなります。

管理パネルでは、期限切れになっていないレコードのみを表示したいので、私の質問はどのselect文を使ってこれを行うのが最も効率的でしょうか?

SELECT * FROM `orders` WHERE datenow > date 

"日" の順序+ 15分

P.S.の日付です また、PHPを使用してこれを行う方法はありますか?データベースに負荷をかけすぎる必要はありませんか?

多くのありがとうございます!

+0

データベースのdatetime関数を使用する代わりに、bigintsとstore timestampを使用する傾向があります。これにより、(少なくとも私にとっては)読みやすさとタイムスタンプ(int)による操作が可能になります。範囲>と<で選択するのは2番目の方法ではかなり簡単です。 – IncredibleHat

+0

私はちょうどこれを行うには、SQLクエリを知りたいですか?私のクエリはもちろん間違っているので – rakupu

+0

PHPではなくMySQLで注文を除外したいのですが、最終的にDBに1000件の有効期限がありますが、アクティブなものは1つしかありません.1001行を返す必要はないからですMySQLはループしてPHPで1を取得するだけです。 (あなたが定期的にそのテーブルを何らかの形で掃除しない限り) – WOUNDEDStevenJones

答えて

4

期限切れになっていないレコードが必要な場合は、dateがすべてNOW()より大きいすべてのレコードが必要です。

SELECT 
    * 
FROM 
    `orders` 
WHERE 
    `date` > NOW() 

前述のように、これはデータベース側で処理する方が一般的です。データセット全体を転送して(データベースとWebサーバーを分割していると仮定して)、アプリケーションコードでフィルタリングするのではなく、

すべてのdatetime関数を同じサーバー(この場合はデータベース)に置くことの利点は、特に一部の共有ホスティング環境では、データベースのタイムゾーンを変更できないことです。したがって、同じタイムゾーンで時間の比較を行う必要があります。

+1

タイムゾーンについての良い点。 PHPとmysqlが同じに設定されていないと重大な頭痛を引き起こす可能性があります) – IncredibleHat

+0

完璧に、私が探していたものを答えとして選択します – rakupu

+0

ああ...そして、同じタイムゾーン、私はこの問題を十分に処理しなければならなかった – rakupu