1

1 日に 1 つのエントリのみがデータベースに入力されるようにしています。クエリの結果があれば、今日のエントリ n を抽出したいので、それ以上のエントリを禁止するフラグを設定したいと思います。一方、現在の日にまだエントリが作成されていない場合は、フラグが設定されていないままで、追加が許可されます。今日のエントリのクエリを手伝ってくれる人はいますか?使用できる sqlite に組み込まれたタイムスタンプはありますか? また、次のようにテーブルに日付を挿入しています。

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

上記の関数は、ユーザーがエントリを送信したときに呼び出され、同じ関数内で 1 日 1 回のエントリの検証を入力したいと考えています。

注: すべてのアラートはテスト用です。

4

1 に答える 1

2

「時間」を主キーとして使用したため、挿入を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");
        }
    );
    
于 2013-08-06T04:07:46.890 に答える