-4

データベース テーブルをチェックするために毎分実行する必要がある cron ジョブがあります。テーブルは 2 つのフィールド (ユーザー名、lastping) で構成されます。lastping は、mysqlNOW()関数を使用して別のスクリプトによって設定される mysql 日時オブジェクトです。lastping をチェックして、最後に更新されてから 1 分以上経過しているかどうかを確認する必要があります。最後の 1 分間更新されていない場合は、そのユーザー名と lastping を含む行を削除したいと考えています。このSQLステートメントのようなものを使用して確認できると思います。

FROM client WHERE lastping < NOW() - INTERVAL 1 MINUTE;

私の質問は、テーブル全体に対してこのチェックを行い、1 分以上経過している場合はレコードを削除するように select ステートメントをフォーマットする方法です。

まだ接続しているユーザーのために、15 ~ 30 秒ごとにデータベースを更新します。これの全体的な目的は、その瞬間、または少なくとも過去 60 秒以内にどのエンドユーザーが私の C++ アプリケーションを使用しているかを確認できるようにすることです。これにより、統計を保持できます。

これは私がこれまで行ってきたことです。出力は Deleted inactive users ですが、実際には発生しません。

mysql_connect(SERVER, USERNAME, PASSWORD);
mysql_select_db(DATABASE);
$query="DELETE (username, lastping) from client where lastping < NOW() - INTERVAL 1 MINUTE";
mysql_query($query) or die ('Error updating database');
echo "Deleted inactive users";
4

1 に答える 1

0

1 つのクエリで行を削除して選択することはできません。削除した行を「戻す」または「選択する」方法はありません。

その場合、1 つのトランザクションで 2 つのクエリを実行するトランザクションを使用することができます。 http://dev.mysql.com/doc/refman/5.0/en/commit.html

于 2012-08-01T18:13:03.493 に答える