2012-04-18 14 views
2

新しいデータがあるかどうかを確認するために、外部サーバーからデータベースを10秒ごとにチェックするアプリケーションを作成する必要があります。現時点では、データが2つのJSON(古いJSONとサーバーからフェッチされたもの)を比較してサーバーを変更したかどうかをチェックし、アラートユーザーがあるかどうかを確認するjavascriptがあります。しかし、それは私がこのアプリケーションで必要なものではありません。データが変更されたときではなく、新しいデータの場合にのみ警告を発する必要があります。mysqlに新しいデータがあるか確認する方法

MYSQLをクエリするPHPコードでこれを行うことができ、num_resultsが0より大きいクエリnum_resultsが0より大きい(ユーザーが通知を受け取るまで)場合は、このアプリケーションでは、ユーザーが新しいデータを入手できるかぎり、新しいデータが0.1秒または10秒でユーザーに利用可能かどうかは関係ありません。これは私がMYSQLチェックを実行しようとしました方法ですが、それが動作していません。

<?php 
include 'config.php'; 

if(isset($_GET['ID'])) { 
    $maxLoop = 20;  
    while($maxLoop--) { 
     $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     try { 
      $sth = $dbh->prepare('select * from testit where id = :id'); 
      $sth->bindParam(':id',$_GET['ID'],PDO::PARAM_INT); 
      $sth->execute(); 
      if($sth->rowCount()>0) { 
       $results = $sth->fetchAll(PDO::FETCH_OBJ); 
       echo '{"key":'. json_encode($results) .'}'; 
       exit; // Found new data, end loop and script 
      } 
     } catch(PDOException $e) { 
      break; 
     } 
     sleep(3);  
    } // end while 
} // end if 

それでは、どのように私はそれを動作させるために、このコードを変更することができ、または私はちょうどこれを行うだろういくつかのJavaScriptを書くようにしてください?もしそうならば、データが変更されたかどうかをチェックするのではなく、データが新しいかどうかをどうすれば確認できますか?

答えて

3

「新しい」データをどのように記録しますか?タイムスタンプはありますか? auto_increment主キーフィールド?

ポーリングの最も簡単な方法は、最後の既知のID /タイムスタンプを追跡し、より高いID /新しいタイムスタンプのものがあるかどうかを確認することです。

そのまま、あなたの方法は非常に非効率的です。テーブル内のすべてのレコードを選択すると、mysql/pdoはディスクからデータを取り出し始めます。そして、行数を取得した後にスローします。より効率的な方法は、select count(*) ...にあり、その値をチェックすることです。これにより、mysqlはディスクから実際の行データを取得する必要がなくなります。いくつかのテーブルタイプ(特にmyisam)では、カウント(*)操作が非常に迅速です。

+0

表にはconditionという列があります。したがって、アプリケーションは、条件がfalseの行があるかどうかを確認する必要があります。それがあればそれを印刷するべきです。ユーザーがこれらの行を見ると、値をfalseからtrueに変更するボタンが押されます。したがって、condition = falseの行はすべて「新しいデータ」とみなされます。 – user1323294

+0

と私は、行数だけでなく、ユーザーのすべてのデータを表示する必要があります。 – user1323294

1

アプリケーションが10秒ごとに変更を確認するようにするには、サーバー上のPHPファイルにasyncronousリクエストを行うにはAJAXを使用する必要があります。 PHPファイルでは、あなたはselect * from testit where condition=falseしか持っていないので、あなたはあなたの "新しいデータ"を取得します。ここには、AJAXの基礎を学ぶことができるリンクがあります。 http://www.w3schools.com/ajax/default.asp

関連する問題