2012-01-26 12 views
10

私はそうのような「last_seen」と呼ばれるテーブルのカラムのタイムスタンプを持っている:MySQLで現在のタイムスタンプの10分以内にあるすべてのレコードを選択する方法は?

2012-01-25 18:46:42 
2012-01-23 08:19:04 
2012-01-23 08:19:04 

etc... 

は、どのように私は(最も効率的な方法で)タイムスタンプが現在のタイムスタンプの10分以内にあるすべてのレコードを取得することができますか?

答えて

35

最も効率的な方法は、あなたのタイムスタンプ(およびその上の関数を使用せずにタイムスタンプのみ)を、すべての行に対して定数として計算できる式と比較することです。このようにして、mysqlはタイムスタンプ列。

SELECT * FROM myTable 
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE 

あなたは常にインデックスは、テーブル内のすべての行をチェックする必要なしに、あなたのWHERE条件を満たした行を見つけるために使用することができるかどうかを確認するためにEXPLAIN SELECT ...を試すことができます。

3

あなたの質問は現在のタイムスタンプの10分以内のレコードを要求しますが、私は過去(ない未来)でせいぜい10分を意味しないためにそれを取る:これは10分を追加し

SELECT col1, col2, col3 
FROM table 
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW(); 

last_seenと比較し、現在の時刻と比較します。値が大きい場合、 last_seenは10分未満です。

使用方法についてはdocumentation on DATE_ADD()を参照してください。

+1

これは「最も効率的な」方法として失敗します。 – piotrm

関連する問題