从循环中的mysql中检索最后n行

时间:2012-04-03 22:49:49

标签: java mysql

这是场景。 我有2个PC客户端(客户端CA和CB)和1个MYSQL服务器(S1)。 CA不断地在S1上生成和存储数据,CB从S1获取数据并使用它生成图形。

CB需要始终从S1轮询记录,这就是我在while循环中拥有它的原因。如何检索循环中的最后n条记录而不从先前的查询中获取重复项? I.E.

n = 100,

CA插入100条记录,CB获取最后100条记录

CA插入50条记录,CB获取最后100条记录。其中50条记录与之前的查询相同,

请帮忙。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我假设你在列#34; 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();
    }
  }
}

对于不精确的语法道歉,它是关于这个想法的。

答案 2 :(得分:0)

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

SELECT * FROM tbl WHERE id > last_received_id ORDER BY id ASC LIMIT 100;