6

MYSQLをデータベースとして使用するRailsアプリケーションがあります。条件によっては、現在時刻のちょうど2時間前に保存されたテーブルからすべてのレコードを削除する必要があります。

私の質問は:

DELETE FROM TABLE_NAME WHERE (NOW() - created_at) > 7200;

ここで、create_atは日時の列タイプです。「2012-12-0406:39:44」の形式で値を保存する

私の問題は、レコードの作成時間が40〜50分で削除されたにもかかわらず、上記のクエリがレコードをフェッチすることです。唯一の問題は、作成時間から40〜50分に達した後にレコードが削除されることです。

誰かが私の質問を訂正してくれませんか。MySQLソリューションが必要です。私を助けてください

4

4 に答える 4

4

ちょうど2時間前に作成されたレコードを削除する場合は、おそらくこれが必要です。

DELETE FROM TABLE_NAME WHERE created_at = NOW() - INTERVAL 2 HOUR

または、これにより、2時間以上前に作成されたすべてのレコードが削除されます。

DELETE FROM TABLE_NAME WHERE created_at < NOW() - INTERVAL 2 HOUR
于 2012-12-04T11:49:44.860 に答える
2

これを試して ::

DELETE FROM TABLE_NAME WHERE TIMEDIFF(NOW(),created_at) < '02:00:00';
于 2012-12-04T11:50:52.763 に答える
1

試す:

DELETE FROM TABLE_NAME WHERE created_at<DATE_SUB(NOW(),INTERVAL 2 HOUR)

このクエリは、2時間以上前に作成されたものをすべて削除します。等号を付けると、正確に2時間前(秒単位)を意味します。もちろん、分だけを考慮するように日付をフォーマットすることはできますが、それはクエリを遅くします。created_atにインデックスが付けられている場合(そしてそうあるべきだと思います)、インデックスを使用して削除をより高速に実行できるように、関数を実行しないでください。

于 2012-12-04T11:52:53.123 に答える
0

時間の経過内に作成されたすべてのレコードを削除したいとのことですが、したがって、減算演算に「大なり記号」演算子を適用しないでください。代わりに、適切な時間枠を指定するようにしてください。

また、timediff関数 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediffを確認することもできます。

申し訳ありませんが、mysqlサーバーが手元にないため、適切なステートメントを投稿できません。

于 2012-12-04T11:55:22.463 に答える