这是场景。 我有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条记录与之前的查询相同,
请帮忙。
答案 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;