ユーザーの認証 (ユーザー名とパスワード) を格納するテーブルと設定を格納するテーブルの 2 つのテーブルを持つ非常に単純なデータベースがあります。現在、私のアプリが初期化されると、最初に設定がチェックされ、次に認証されます。でも一気に掴みたい。アプリの設計方法では、どちらのテーブルにもレコードが 1 つしかないため、クエリで WHERE 句を使用しません。
問題は、クエリを個別に実行すると、結合した場合とは異なる結果が得られることです。
次のシナリオを検討してください。ユーザーがログインし、いくつかの設定を行ってからログアウトします。5 月のアプリでは、これにより認証テーブルがクリアされますが、設定はそのまま残ります。
サインアウト クエリ (認証テーブルをクリアするだけ)
db.transaction(function(tx) {
tx.executeSql('DELETE FROM userdata');
}, errorDB);
ただし、これは「0行が見つかりました」と出力します。
db.transaction(function(tx) {
tx.executeSql('SELECT USERDATA.*, PREFS.* FROM USERDATA, PREFS', [], function (tx, results) {
var len = results.rows.length;
console.log(len + " rows found.");
for (var i=0; i<len; i++){
console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i));
}
}, errorDB);
}, errorDB);
これは行を出力しますが:
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM PREFS', [], function (tx, results) {
var len = results.rows.length;
console.log(len + " rows found.");
for (var i=0; i<len; i++){
console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i));
}
}, errorDB);
}, errorDB);
認証がなくても、結合クエリは設定データを見つけるべきではありませんか? 何が起きてる?