2012-11-19 23 views
3

是否有任何方法來停止對mysql表的javascript查詢,並等待下一行插入?node.js JavaScript的MySQL查詢等待unitl下一行被插入

例如使用功能:

var query = connection.query('SELECT * FROM table'); 

我想讀取所有的行表,顯示它們,等到下一行插入,插入讀行和等待,直到其他插入等等...

基本上它應該讀取每次其他表從PHP或其他腳本(觸發事件)獲取更新時更新的表。

我找不到有關光標在javascript中的滑動的任何信息mysql的查詢也許有一些關於它的文章?

+0

所以基本上你想JavaScript來知道什麼時候插入一個新行?爲什麼不把你的功能綁定到插入行的函數?這樣,你總是知道何時放置一個新的行。 – Joseph

+0

嗯,我正在讀取由另一個表更新mysql觸發器創建的表。基本上我想顯示實時更新。它們是由PHP腳本創建的 – sauletasmiestas

+0

然後,如果你在你的文章中解釋說你不是唯一使用db並希望從它獲得更新的人。否則,每個人都可以假設只有你的應用程序正在使用它。 – Joseph

回答

2

你可以輪詢這樣的答案,因爲我從來沒有使用過mysql節點的庫。

行計數間隔
變種連接= ..., lastCount;

funciton mysqlPoll() { 
    var query = connection.query('SELECT count(field) as count FROM table'); 

    query.exec(function(result) { 
     if (result.count != lastCount) { 
      //Select all the rows here using offset to skip the already processes 
      //process them 
      lastCount = result.count; 
     } 
    }); 
} 

setInterval(mysqlPoll, 500); //every 1/2 second 

,如果你有一個主自動INC鍵間隔

var connection = ..., 
    lastCount = 0; 

funciton mysqlPoll() { 
    var query = connection.query('SELECT * FROM table WHERE primaryId > '+lastCount); 

    query.exec(function(result) { 
     if (result.count != lastCount) { 
      //Select all the rows here using offset to skip the already processes 
      //process them 
      lastCount = lastResultsPrimaryId; 
     } 
    }); 
} 

setInterval(mysqlPoll, 500); //every 1/2 second 

另一種選擇是打開一個套接字(淨值,HTTP等),對Node.js和受平更好它從php腳本觸發更新。

希望有幫助

+0

感謝您的幫助。我知道MySQL不是使用js的最佳選擇,也許你知道一些支持邏輯連接的數據庫(我在一個SELECT中有兩個SELECT),並且還有例如tailable遊標和oplog事件,比如MongoDB? – sauletasmiestas

+0

你看過https://github.com/1602/jugglingdb它允許你使用api下的任何數據庫。在不知道數據結構的情況下,以及您嘗試執行的操作對於幫助確定正確的db非常困難 –