2

メッセージがデータベースに投稿されると、たとえば1分後にその行が削除されるように、関数を実行しようとしています。

私のデータベースは次のようになります。

       CREATE TABLE `messages` (
       `id` int(11) NOT NULL AUTO_INCREMENT,
       `user_id` int(35) NOT NULL,
       `account_number` int(25) NOT NULL,
       `message_content` text NOT NULL,
      `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `status` enum('1','0') NOT NULL,
       `txt` varchar(20) NOT NULL DEFAULT 'Unread',
        PRIMARY KEY (`id`)
         ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Table for storing notifications/messages' AUTO_INCREMENT=27 ;

私の現在のコードは次のようになります。

            $sql = "DELETE FROM messages WHERE created < DATE_SUB( NOW( ) , INTERVAL 2 MINUTE )";
    $this->db->query($sql);

基本的に、1/2 分後に言ったように、取得している ID によってデータベースからメッセージを削除する必要があります。上記のコードが機能しないため、これをどのように達成しますか。私は誰でも私を助けるのに役立つActiveRecordを使用しています。

前もって感謝します。

4

2 に答える 2

0

サーバーへのアクセスに応じて、これに取り組む方法がいくつかあります。

  1. MySQL イベント ( http://dev.mysql.com/doc/refman/5.1/en/events.html ) を使用します。これにより、テーブルの更新ごとに SQL クエリを実行できます。ただし、これを使用するには、データベースに対する「SUPER」権限が必要です。

  2. crontab(unix) または(windows) を使用scheduled taskして、SQL クエリを含む php スクリプトを毎分実行します。

  3. ページの上部に SQL クエリを配置します。もちろん、これは完全なパフォーマンスではありませんが、サイト/アプリケーションのビジー状態やデータベース/テーブルの大きさによっては、違いに気付くとは思えません。

参考までに:このSQLは機能します: DELETE FROM messages WHERE created < (NOW() - INTERVAL 30 SECOND)

于 2013-08-05T13:58:28.253 に答える