2

これがシナリオです。2台のPCクライアント(クライアントCAとCB)と1台のMYSQLサーバー(S1)があります。CAは常にS1にデータを生成して保存し、CBはS1からデータを取得し、それを使用してグラフィックを生成します。

CBは常にS1からのレコードをポーリングする必要があるため、whileループ内にあります。以前のクエリから重複を取得せずに、ループ内の最後のnレコードを取得するにはどうすればよいですか。IE

n = 100、

CAは100レコードを挿入し、CBは最後の100レコードを取得します

CAは50レコードを挿入し、CBは最後の100レコードを取得します。これらのレコードのうち50は、前のクエリと同じです。

助けてください。

4

3 に答える 3

1

レコードがいつ挿入されたかを追跡するフィールドをテーブルに追加します。

次に、取得した最新のタイムステップを CB クライアントに追跡させ、最後に取得した時間より新しいレコードのみに選択を制限します。

于 2012-04-03T22:56:45.550 に答える
1

「create_time」列にデータとともにタイムスタンプを保存していると思います。

SELECT * FROM my_table WHERE create_time > time_modified_on_every_iteration ORDER BY create_time LIMIT 0, 100

そしてあなたのループ:

Date lastDate = some_very_old_date;
while(true) {
  rows = sql_query.getData(time_modified_on_every_iteration = lastDate);
  iter = rows.iterator()
  while (iter.hasNext()) {
    // do stuff with current row
    if(!iter.hasNext()) {
      // last cycle
      lastDate = iter.current.getCreate_time();
    }
  }
}

正確な構文ではないことをお詫びします。それはアイデアに関するものです。

于 2012-04-03T23:06:05.537 に答える
0

同じ秒に複数のレコードが作成される可能性がある場合は、タイムスタンプの代わりに自動インクリメント ID を使用することをお勧めします。次に、指定されたタイムスタンプの例については、最後に受信したレコードの ID よりも大きい ID を持つレコードをクエリするだけです。

SELECT * FROM tbl WHERE id > last_received_id ORDER BY id ASC LIMIT 100;
于 2012-04-04T00:31:56.330 に答える