2011-02-02 6 views
0

나는 웹 응용 프로그램을 작성하는 jQuery와 HTML을 사용하고 있습니다.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()에 의한 주문'이 잘 작동합니다. –

+0

아무 것도 반환하지 않습니다. Bert. – 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를 사용하고 있습니까? – 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); 

    } 
관련 문제