数据库

如何随机选取n条记录或者对记录作随机排序?

2010-12-13

这里是从SQL Server: 中取随机记录

Q. 如何得到随机排序结果?

A. 要得到随机排序的列,或者返回x条随机选择的列,你可以使用随机数。但是RAND函数在
一个查询中只能返回一个结果。你可以在NOWID函数返回的列上做ORDER BY。请看示例:

SELECT *
FROM Northwind..Orders
ORDER BY NEWID()

SELECT TOP 10 *
FROM Northwind..Orders
ORDER BY NEWID()

这段话翻译得真是费劲,干脆不管原文,直接意译了。
不过提醒大家注意,这种方法是要对整个表扫描,然后产生一个计算列再排序的,最好不要
对大的表作这样的操作,否则会很慢的。

 

这里是从 Access 中取随机记录:

<%

cn为connection对象
rs为recordset对象
recordCount为记录总数
i代表记录数
j代表重试次数,防止进入死循环
dim i,j
randomize()
do while i<8 and j<30
    //8条记录
    sql="select F1,F2 from T1 where id="&rnd()*recordCount\1
    rs.open sql,cn,1,1
    if not (rs.bof and rs.eof) then
        i=i+1
        response.write("....")
    end if
    rs.close
    j=j+1
loop
%>
当记录数相对于所取记录数比较小时,易出现重复取某一记录,要克服这一点就得再加几句了...