以随机顺序返回行

每次查询运行时,是否可以编写按照随机顺序返回表行的SQL查询?

SELECT * FROM table ORDER BY NEWID() 

这是最简单的解决scheme:

 SELECT quote FROM quotes ORDER BY RAND() 

虽然这不是最有效的。 这是一个更好的解决scheme。

通常的方法是使用NEWID()函数,它生成一个唯一的GUID。 所以,

 SELECT * FROM dbo.Foo ORDER BY NEWID(); 

(尽pipe有标签)问题本身在使用哪个数据库服务器时是模棱两可的,所以你最终可能会在这里想要另一个服务器的答案。 对于其他数据库服务器(MySQL,PostgreSQL,IBM DB2和Oracle),请看http://www.petefreitag.com/item/466.cfm

这是一个例子( 来源 ):

 SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint); 

为了高效,随机,最好有两个不同的查询。

就像是…

从表中selecttable_id

然后,以您select的语言,select一个随机ID,然后拉取该行的数据。

SELECT * FROM table WHERE table_id = $ rand_id

但是,如果您希望表中有很多行,那不是一个好主意。 如果你对随机select的东西进行某种限制,会更好。 对于出版物,可以从过去一年内发布的项目中随机select。

这是你需要的:

SELECT * FROM table_name ORDER BY RAND()LIMIT 1