在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()