SQLite的 - ORDER BY RAND()(SQLite - ORDER BY RAND(

2019-06-18 06:38发布

在MySQL我可以使用RAND()函数,是有SQLite中3任何替代?

Answer 1:

使用随机() :

SELECT foo FROM bar
  WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
  LIMIT 1;

编辑(由QOP):自上的文档的SQLite自动增量编列规定:

只要你不使用的最大ROWID值,你永远不删除与最大的ROWID在表中的条目上述正常ROWID选择算法将产生单调递增独特的ROWID。 如果你删除行,然后从以前删除的行的ROWID可能创建新行时重用

如果你没有以上是唯一真正的INTEGER PRIMARY KEY AUTOINCREMENT列(它仍然很好地工作INTEGER PRIMARY KEY列)。 无论如何,这应该是更便携/可靠:

SELECT foo FROM bar
  WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;

ROWID_ROWID_OID是SQLite的内部行ID的所有别名。



Answer 2:

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


Answer 3:

解决了:

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


Answer 4:

对于SQLite的一个更好的性能使用这样的:

SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x) 

这也适用于MySQL的。 因为SQL引擎第一负荷预测行存储的领域,然后对它们进行排序 ,在这里我们只是加载和随机排序行的id字段此运行速度更快,然后我们让他们的X,并发现这些X IDS其中的完整行是由默认索引。



文章来源: SQLite - ORDER BY RAND()