2011-02-03 3 views
0

SQLiteデータベースを作成し、少しデータを挿入するJSがあります。SQLite RANDOM()問題

私はそれを照会し、アラートとして結果の情報を吐き出す機能を持っています。

データベースからランダムなフィールドを取得しようとすると、何の結果も得られません(明らかなエラーもありません)。


<title>Golf score keeper</title> 

<script src="http://www.google.com/jsapi"></script> 

<script> 
    google.load("jquery", "1.4.1"); 
</script> 

<script> 

    $(document).ready(function() { 

    var db = window.openDatabase("scores", "", "Previous Scores", 1024*1000); 

    db.transaction(function(tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Strokes(id INTEGER PRIMARY KEY, sample TEXT, sample2 TEXT)', []); 
    }); 


    insertScores(); 
    extractScores() 

    }); 

    function insertScores() { 

    var example = "One"; 
    var example2 = "Two"; 

    db.transaction(function(tx) { 
     tx.executeSql('INSERT INTO Strokes (sample, sample2) VALUES (?, ?)', [example, example2]); 
    }); 


    db.transaction(function(tx) { 
     tx.executeSql('INSERT INTO Strokes (sample, sample2) VALUES ("example3", "example4")', []); 
     tx.executeSql('INSERT INTO Strokes (sample, sample2) VALUES ("example5", "example6")', []); 

    }); 
    } 

    function extractScores() { 

    db.transaction(function(tx) { 

     //THIS ONE FAILS 

    // tx.executeSql('SELECT * FROM Strokes ORDER BY RANDOM() LIMIT 1;', [], displayResults); 

     tx.executeSql('SELECT * FROM Strokes LIMIT 1;', [], displayResults); 

    }); 
    } 

    function displayResults(tx, rs){ 

     var $selectedAnswer = ""; 
      for (var i=0; i < rs.rows.length; i++) { 
       var row = rs.rows.item(i); 

      $selectedAnswer =($selectedAnswer + 'sample: ' + row['sample'] + ', sample2: ' + row['sample2']); 
     } 

     alert($selectedAnswer); 
    } 

</script> 

誰もがこれを尋することはできますか?

答えて

0

。 RANDOM()はSQL Dialectの関数としてサポートされていません。 Firefox 4 Beta 9でも同じ結果になっています。クエリは無効と見なされます。

+0

RANDOM()はSQLiteのRAND()バージョンです。 http://www.bernzilla.com/2008/05/13/selecting-a-random-row-from-an-sqlite-table/ 何とか私が間違って使用している場合を除き、動作するはずです! – Richard

+0

もちろん、chrome/firefoxのsqliteの埋め込みバージョンはこの機能をサポートしていません。 RANDOM()をidに置き換えると、クエリが機能します! – keatch

+0

ああ、ランダムな行を得るにはどうすればいいですか?カウントを行い、それを最大値として使用し、jsを使って乱数を生成し、その乱数をクエリで使用しますか? – Richard

0

これはSQLiteにはまったく関係ありません。 (そのちょうどSQLiteのは、SQL方言が実装されていること)
それは、HTML5 Local Storage

例です:私はそれをクロームで実行を与えるましHTML5 Web Storage/localStorage(詳細はソースの表示をクリックしてください)

+0

ローカルストレージは、ローカル値のペアを作成するときに使用します。 オープンデータベースを作成するときは、Webkit、geckoなどでSQLiteを使用してください(あなたが送ったリンクをさらに読む!) – Richard

+0

これは良い例ですが、私はlocalstorageではなくSQLiteを使いたい、別個のエンティティ。 – Richard

0

私はこの問題を解決していませんが、回避策を作成しました。 ランダムは機能しません。select countを使用すると、再生する数字が得られませんが、これは遠いですが、データベースにクエリするランダムな数字が与えられます。

function finalScores() { 

     //This gets a the last id in the table "Strokes", we'll use this to generate a random number 
     db.transaction(function(tx) { 
      tx.executeSql('SELECT id FROM Strokes ORDER BY id DESC limit 1;', [], lastNumber); 
     }); 
    } 


    function lastNumber(tx, rs){ 

     var $lastNo = ""; 

      //This sets the last id as $lastNo to use later 
      for (var i=0; i < rs.rows.length; i++) { 
      var row = rs.rows.item(i); 
      var $lastNo = row['id'];   
     } 

    //This should be the last number  
    alert($lastNo); 


    //We use this to avoid getting Zero as an answer 

    function randomFromTo(from, to){ 
    return Math.floor(Math.random() * (to - from + 1) + from); 
    } 
     //This generates a random number between [and including] 1 and your last number 
     var $randomNum = randomFromTo(1, $lastNo); 

    //This is our random number 
    alert($randomNum); 

    } 
関連する問題