我正在使用这个简单的查询在ms-access数据库上使用随机排序:
SELECT pk FROM TABLE ORDER BY Rnd(pk) asc
当我使用Microsoft Access 2010进行测试时,它工作正常
但是,当我使用经典asp调用此查询时,随机排序不起作用。
这是我的代码:
set Rs = Server.CreateObject("ADODB.Recordset")
Rs.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/dbfolder") & "\dbname.mdb"
Rs.Source = "SELECT pk FROM TABLE ORDER BY Rnd(pk) asc"
Rs.CursorType = 3
Rs.CursorLocation = 2
Rs.LockType = 3
Rs.Open()
do while not Rs.eof
'do stuff
Rs.Movenext
loop
答案 0 :(得分:3)
您只需要“salt”您的随机生成器:
Rs.Source = "SELECT pk FROM TABLE ORDER BY Rnd(-Timer() * [pk]) Asc"
答案 1 :(得分:1)
最后似乎我找到了解决方案。
来源:http://www.cosnetics.co.uk/articles/select-random-records-from-access/
按照以上链接中的内容
这是从Access中选择随机记录的一种非常简单的方法 数据库:
SELECT TOP 5 * FROM [tableName] ORDER BY rnd(INT(NOW*id)-NOW*id)
唯一的先决条件是您有一个AutoNumber Id列。它 还应该注意,虽然这会产生一组随机的 记录,它们在数学意义上并非真正随机,但是 对于大多数用途来说应该是随机的。
这种选择记录的方法也适用于sql server,但是你 必须将rnd改为rand。
如果您找到更好的解决方案,我会很高兴将其标记为好的解决方案。与此同时,我会把它留在这里。希望这会有助于其他人。 (你不会相信它,但我花了一些时间才找到它)