2011-02-02 3 views
0

私はjQueryとHTMLを使ってWebアプリケーションを作成しています。SQLiteブラウザで動作していないランダム

現在のところ、データベースを作成し、データベースにデータを追加して(チェックして作業している)、データを表示します。

私が使用している機能は、それにSQLのこのビットを持っています

絶対に動作しない
tx.executeSql('SELECT * FROM entries ORDER BY RANDOM() LIMIT 1', [], renderResults); 

"ORDER BY RANDOM()"部分を削除しても問題ありません。

私は狂っている!

これは私のコードです::私はそれを残す場合

<script src="http://www.google.com/jsapi"></script> 
<script> 
    google.load("jquery", "1.4.1"); 
</script> 
<script> 


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


    $(document).ready(function() { 

    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) { 
     tx.executeSql('SELECT * FROM Strokes ORDER BY RANDOM() 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> 

私が削除した場合は、 "ORDER RANDOM BY()" それが動作、何も起こりません -

アップデートはここに私のコードです。

+0

あなたは「どちらがうまくいかないか」を明確にすることができますか?法的なSQLとして拒否されましたか?ランダムな行は返されませんか? –

+0

データベースに整数の主キーがありますか?私は私のdbにプライマリキーを持っていて、 'random by(order)by order'はうまく動作します。 –

+0

何も返されません。 – Richard

答えて

1

RANDOM()は乱数を返します。 ORDER BY RANDOM()は「列Xによる順序」を意味します.Xは列1から始まるランダムな列番号です。おそらくあなたが探しているものではありません。

LIMITとOFFSETを使用しようとしていますか?次を使用して、

+0

私がしたいのは、id colに基づいてランダムな行を1つ返すことだけです。 – Richard

0

試してみてください。

ORDER BY RAND() 
+0

これはsqliteの乱数の構文ではありません。 http://www.sqlite。org/lang_corefunc.html –

+0

それは 'ORDER BY RANDOM()'でなければなりません –

0

私のクエリは、次のとおりです。

nは
select * from circles order by random() limit n 

を必要な行数それは正常に動作し、私のテーブルのいずれかからランダムな行を返します。

@リチャードあなたはdbスキーマを投稿する必要があります。機能を提案するのが簡単になります。

+0

あなたが使っているコードを投稿できますか?これはJSをWebブラウザで使用していますか? – Richard

1

私はこの問題を解決していませんが、回避策を作成しました。ランダムがうまくいかず、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); 

    }