繁体   English   中英

SQL选择随机行

[英]SQL Select Random Row

我在从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版本支持RANDOM()函数。 如果您尝试用id替换RANDOM() ,则查询有效!

因此,解决此问题的唯一方法是检索所有记录,计算行数并生成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); 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM