2012-04-03 2 views
2

Вот сценарий. У меня есть 2 клиента ПК (клиентский ЦС и ЦБ) и 1 сервер MYSQL (S1). CA генерирует и сохраняет данные на S1 постоянно, CB получает данные из S1 и создает с ним графику.Получить последние n строк из mysql в цикле

CB должен постоянно регистрировать записи из S1, поэтому у меня есть это в замкнутом цикле. Как получить последние n записей в цикле, не получая дубликатов из предыдущих запросов ?. И.Е.

п = 100,

СА вставляет 100 записей, CB получает последние 100 записей

СА вставляет 50 записей, CB получает последние 100 записей. 50 из этих записей совпадают с предыдущим запросом,

Пожалуйста, помогите.

ответ

1

Добавить поле в таблицу, в котором будет записана запись.

Затем, у клипа клиента CB, который был самым последним временным временем, который он получил, а затем ограничивает его выборку только записями, которые являются более поздними, чем последний раз, когда он был вытащен.

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(); 
    } 
    } 
} 

Извиняюсь за не точного синтаксиса, это об идее.

0

Если у вас есть потенциал для нескольких записей, созданных в течение одной и той же секунды, я бы предложил использовать автоматически увеличивающий id вместо метки времени. Затем, что касается приведенных примеров временных меток, вы можете просто запросить записи с идентификатором, большим, чем у последней принятой записи -

SELECT * FROM tbl WHERE id > last_received_id ORDER BY id ASC LIMIT 100; 
Смежные вопросы