Random()在MySql中?

是否可以从表X中检索flags == 0的随机行? 使用MySql和C#

SELECT * FROM X WHERE flags = 0 ORDER BY rand() LIMIT 1 

这将检索1个随机行。 将N替换为1以获得N个随机行。

警告:正如其他人指出的那样,这可能很慢,因为它需要全表扫描。 我以前用DB2做过这个,这对于有数十万行的表来说非常有效,但是根据tereško的回答中的链接,MySQL似乎降级得更快。

你永远不应该使用ORDER BY RAND() 。 随着表的大小增长,它变得非常慢。 相反,你应该阅读这篇文章 。

如果您对学习有不合理的恐惧,那么这里有解决方案可以满足您的要求:

 SELECT X.x_id, X.foobar FROM X JOIN ( SELECT CEIL(RAND()*(SELECT MAX(x_id) FROM X)) AS x_id ) AS Choices USING ( x_id ) WHERE X.x_id >= Choices.x_id AND X.flags = 0 ORDER BY X.x_id LIMIT 1;