-1

こんにちは、mysql テーブルの特定の行が空でなくなったかどうかを検出するスクリプトを作成したいと考えています。

特定のテーブル行をチェックするphpスクリプトを5秒ごとに実行する必要があると思います。それらのいずれかが空の場合、更新を続行する必要があります。そうでない場合は、更新/入力されたテーブルを表示する別の php ページにリダイレクトする必要があります。

これを行う方法についてのアイデアはありますか?

「億万長者になりたい」というゲームのようなもので、x 人が同じ質問に答える必要があります。それらに答えると、その答えが特定のテーブル行に保存されます。これらの行が空でない場合、メイン ページにはすべての回答と回答に費やした時間を表示する必要があります。

「true」または「false」を返す5秒ごとのスクリプトが必要です(行のいずれかが空の場合)。

乾杯、

マッツ

4

2 に答える 2

0

テーブルを 5 秒ごとにポーリングするのは、非常に間違っているように思えます。

外部イベントにどのように反応するかについて、ワークフローを再考する必要があります。

データベースを PostgreSQL に変更する余裕がある場合は、この問題の適切な解決策となります。つまり、対象のテーブルにトリガーを作成し、そのトリガー内で を使用しますNOTIFY

テーブルの変更に対応したい別の接続は、 を使用して通知を登録し、 on 接続ハンドルLISTENを使用して単純にスリープ状態になります。select()次に、トリガーが発生すると、この接続はすぐにこのイベントを受け取り、すぐに反応できます。

このアプローチにより、サーバーとクライアントの両方で正確に 0 の CPU 時間を使用しながら、変更に即座に対応することができます。

于 2012-12-15T20:20:45.170 に答える
0

これを行う方法:

プレイヤーが質問に答えたときに JavaScript タイマーを設定し (たとえば、「他のプレイヤーが答えるのを待っています」というメッセージを表示する)、5 秒ごとに php スクリプト (waiting.php としましょう) への非同期クエリをトリガーします。waiting.php が 0 を返す場合、何も起こりません。waiting.php で 1 が返され、プレイヤーはページ ウィッチにリダイレクトされ、すべての回答と時間が表示されます

waiting.php で、次のように記述します。

echo (current(mysql_fetch_row(mysqli_query('SELECT count(*) from responses WHERE questionId = '.$_GET['QuestionId'].' AND answer_field IS NULL'))) > 0 ? '0' : '1');
于 2012-12-15T20:23:02.593 に答える