2012-04-03 62 views
2

這裏是場景。 我有2個PC客戶端(客戶端CA和CB)和1個MYSQL服務器(S1)。 CA始終在S1上生成和存儲數據,CB從S1獲取數據並生成一個圖形。在循環中從mysql中檢索最後n行

CB需要輪詢來自S1的記錄,這就是爲什麼我在一個while循環內完成它的原因。我如何檢索循環中的最後n個記錄,而不會從以前的查詢中得到重複? I.E.

N = 100,

CA插入100條記錄,CB得到最後100個記錄

CA插入物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而不是時間戳。然後,就給出的時間戳示例而言,您可以簡單地查詢id大於上次接收記錄的記錄 -

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