【问题标题】:SQLite Random not working in browserSQLite Random 在浏览器中不起作用
【发布时间】:2011-02-02 23:39:30
【问题描述】:

我正在使用 jQuery 和 HTML 编写一个网络应用程序。

目前它所做的只是创建一个数据库,将数据添加到数据库中(检查并正常工作),然后显示数据。

我正在使用的函数中有这段 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 BY RANDOM()”,它会起作用,如果我把它留在里面,什么都不会发生。

【问题讨论】:

  • 您能否澄清“这绝对行不通”。被拒绝为合法的sql?不返回随机行?
  • 您的数据库中是否有整数主键?我的数据库中有一个主键,order by random() 工作正常。
  • 不返回任何东西 Bert.

标签: jquery sqlite html


【解决方案1】:

RANDOM() 返回一个随机数。 ORDER BY RANDOM() 表示“按 X 列排序”,其中 X 是随机列号,从第 1 列开始。可能不是您要查找的内容。

您是否尝试使用 LIMIT 和 OFFSET?

【讨论】:

  • 我要做的就是根据 id col 返回 1 个随机行。
【解决方案2】:

我还没有解决这个问题,但我已经创建了一个解决方法。由于 random 不起作用,并且 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);

    }

【讨论】:

    【解决方案3】:

    我看不出您的查询有什么问题。

    SELECT * FROM entries ORDER BY RANDOM() LIMIT 1
    

    来自另一个StackOverflow question

    SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
    

    这里也是:

    http://www.carlj.ca/2007/12/16/selecting-random-records-with-sql/

    【讨论】:

    • SQLite 对 RANDOM() 的理解与大多数数据库不同。
    【解决方案4】:

    尝试使用以下方法:

    ORDER BY RAND()
    

    【讨论】:

    【解决方案5】:

    我的查询如下:

    select * from circles order by random() limit n
    

    其中 n 是所需的行数。它工作正常,从我的一张表中返回随机行。

    @Richard,您应该发布您的数据库架构。将更容易推荐功能。

    【讨论】:

    • 你能把你正在使用的代码发给我吗?这是在网络浏览器中使用 JS 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2015-05-06
    • 2020-04-27
    • 2012-10-23
    相关资源
    最近更新 更多