2013-08-06 51 views
1

我想確保每天只有一個條目進入數據庫。所以我想提取今天的條目n如果有一個結果的查詢我想設置一個標誌,這將不允許任何進一步的條目。然而,如果當天還沒有進入,那麼標誌保持未設定,否則將允許增加。 任何人都可以幫我查詢今天的入口。是否有一個內置的sqlite可以使用的時間戳?我也插入日期到我的表如下:檢索今天的條目在sqlite的phonegap-jquery移動

function change() 
{ 
var d=new Date(); 
var date=d.getDate(); 
var month=d.getMonth(); 
var year=d.getFullYear(); 
var ts = date+':'+month+':'+year; 
alert(ts); 
var userIP= document.getElementById("userInput").value; 
    db.transaction(populateDB, errorCB, successCB); 
function populateDB(tx) { 

    tx.executeSql('CREATE TABLE IF NOT EXISTS READ (time VARCHAR PRIMARY KEY, data FLOAT NOT NULL)'); 
    tx.executeSql('INSERT INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")'); 
} 
    function errorCB(err) { 
    alert("Error processing SQL: "+err); 
} 

function successCB() { 
    alert("success!"); 
    db.transaction(queryDB,errorCB); 
} 
} 

上述函數被調用,當用戶提交的條目,我想進入驗證相同功能內每天一個條目。

注意:所有警報均用於測試目的。

回答

2

正如你曾用「時間」作爲主鍵,因此您可以通過兩種方式

  1. 限制插入使用忽略

    tx.executeSql('INSERT OR IGNORE INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")'); 
    
  2. 首先檢索,查詢,然後插入

    tx.executeSql("SELECT * FROM READ WHERE time = ?", [ts], 
        function(tx, iResults) { 
         if(iResults.rows.length <= 0) { 
          db.transaction(function(tx) { 
           tx.executeSql('INSERT OR IGNORE INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")',[], 
            function() { 
             console.log("Inserted"); 
            }, 
            function() { 
             console.log("Not Inserted"); 
            } 
           ); 
          }); 
         } 
        }, 
        function() { 
         console.log("Not Inserted"); 
        } 
    ); 
    
+1

關於f首先,你已經提供了,我輸入到Db的時間格式是由我在代碼的開始部分中定義的。那麼重要嗎?我的疑惑是,這個soln會工作一天,然後第二天當用戶試圖進入會發生什麼?忽視如何工作呢? –

+0

由於您輸入的格式爲dd:mm:yyyy,因此可以說今天07:08:2013已經輸入,如果再次插入查詢被觸發,那麼它只是不插入記錄,將忽略那個紀錄。所有記錄的時間都是07:08:2013,但第二天記錄的時間爲08:08:2013,所以在這種情況下,它會插入到數據庫中。 –

+0

請讓我們知道這是否工作 –