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

我假设您在“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 回答
1

向表中添加一个字段,用于跟踪插入记录的时间。

接下来,让 CB 客户端跟踪它检索到的最近时间步长,然后将其选择限制为仅比上次提取时间更新的记录。

于 2012-04-03T22:56:45.550 回答
0

如果您有可能在同一秒内创建多个记录,我建议使用自动递增的 id 而不是时间戳。然后,对于给出的时间戳示例,您可以简单地查询 id 大于最后收到的记录的记录 -

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