以随机顺序返回行
每次查询运行时,是否可以编写按照随机顺序返回表行的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