Javascript SQL选择随机行

Javascript SQL选择随机行,javascript,sqlite,Javascript,Sqlite,我在从sqlite数据库中选择随机行时遇到问题,这可用于选择符合以下条件的所有行: tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90', [], renderResultsTest); 如果我然后尝试随机检索其中一个,它将不起作用: tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT

我在从sqlite数据库中选择随机行时遇到问题,这可用于选择符合以下条件的所有行:

tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90', [], renderResultsTest);
如果我然后尝试随机检索其中一个,它将不起作用:

tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT 1', [], renderResultsTest);
我有一个变通方法,使用第一条语句并循环结果,将行ID放入数组,然后从数组中选择一个随机ID。这很好,但我更愿意直接用一句话来表达

我以前在这里看到过这个问题,我自己也在谷歌上搜索过,但看起来随机顺序和限制一个结果应该有效,是我的语法错误还是其他原因导致了这个问题

任何建议都是非常受欢迎的


谢谢

通常您应该在sqlite中使用以下查询来选择单个随机行:

SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT 1;
因此,通过JQuery执行此操作将是:

tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT 1', [], renderResultsTest);
问题是chrome/firefox中嵌入的sqlite版本不支持随机函数。如果您尝试用随机id替换,查询将正常工作

因此,解决这个问题的唯一方法是检索所有记录,计算行数,并生成一个介于0和行数-1之间的随机数。然后,您可以从数据集中选择特定的行并使用该行

tx.executeSql('SELECT * FROM games WHERE genre = "FPS" AND decade = 90 ORDER BY RANDOM() LIMIT 1', [], function (tx, result) { 
     var len = result.rows.length; 

     //generate random number
     var i = Math.floor(Math.random() * len);
     //get row
     var row = result.rows.item(i); 
});

通常,您应该在sqlite中使用以下查询来选择单个随机行:

SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT 1;
因此,通过JQuery执行此操作将是:

tx.executeSql('SELECT * FROM games WHERE genre="fps" AND decade=90 ORDER BY RANDOM() LIMIT 1', [], renderResultsTest);
问题是chrome/firefox中嵌入的sqlite版本不支持随机函数。如果您尝试用随机id替换,查询将正常工作

因此,解决这个问题的唯一方法是检索所有记录,计算行数,并生成一个介于0和行数-1之间的随机数。然后,您可以从数据集中选择特定的行并使用该行

tx.executeSql('SELECT * FROM games WHERE genre = "FPS" AND decade = 90 ORDER BY RANDOM() LIMIT 1', [], function (tx, result) { 
     var len = result.rows.length; 

     //generate random number
     var i = Math.floor(Math.random() * len);
     //get row
     var row = result.rows.item(i); 
});

很抱歉,我输入的不是复制粘贴,单引号问题实际上不在我的代码中,只是一个输入错误。我将编辑op。仍然不起作用。我只是在我自己的Sqlite中测试了这个问题。查询工作正常。出了什么问题?不归还任何东西?你有那种类型和年代的游戏吗?有几款,你介意告诉我你是如何测试它的吗?这样我就可以检查我做得是否正确。我只需打开我的sqlite控制台,就可以手动编写和执行sqlite数据库上的查询,所以我编写了一个类似于你的查询,以匹配我数据库中的一个表。它是有效的。也试着这么做。啊,对不起,我应该说我正在用html5在localstorage中创建sqlitedb,查询在chrome或safarisorry中对我没有任何作用,我键入的不是复制粘贴,单引号问题实际上不在我的代码中,只是一个输入错误,我将编辑op。仍然不起作用。我只是在我自己的Sqlite中测试了这一点。查询工作正常。出了什么问题?不归还任何东西?你有那种类型和年代的游戏吗?有几款,你介意告诉我你是如何测试它的吗?这样我就可以检查我做得是否正确。我只需打开我的sqlite控制台,就可以手动编写和执行sqlite数据库上的查询,所以我编写了一个类似于你的查询,以匹配我数据库中的一个表。它是有效的。啊,对不起,我应该说我正在用html5在localstorage中创建sqlitedb,查询在chrome或safari中对我没有任何作用。显然,谢谢,无论如何,尝试过了,没有区别。如果其他人读到这篇文章,它似乎不适用于html5本地存储,在chrome和safari中尝试。感谢jules的帮助。它在sqlite中的随机性显然很感谢,无论如何都尝试过,没有区别如果其他人读到它,它似乎不会与html5本地存储一起工作,在chrome和safari中尝试。谢谢朱尔斯的帮助。