ColdFusion 9 - 前n个随机查询结果

时间:2013-05-18 18:41:18

标签: coldfusion coldfusion-9 cfml qoq

我有一系列查询可以随机获得5个结果,问题是它需要一段时间来完成它们,主要是因为它涉及一个循环来分配我可以订购的rand值by(Railo可以查询)

我想知道是否有人处理过此问题,并知道如何加快速度。

我低于200毫秒,这不错,但我确信它可以加速。

3 个答案:

答案 0 :(得分:2)

您可能根本不需要使用QoQ。

一个选项可能是将原始查询编写为:

SELECT TOP 5 whatever,you,need
FROM table
ORDER BY rand()

根据您正在使用的数据库服务器更新语法。

可以对常规查询和QoQ进行的另一个选项是:

  1. 仅选择主键
  2. 洗牌阵列(即createObject("java","java.util.Collections").shuffle(Array)
  3. 使用数组中的前五项来选择所需的字段。
  4. 没有循环或更新,只需两个简单的选择。

    当然,如果您的主键只是一个自动递增的整数,那么您可能会使用SELECT MAX(Id),然后使用RandRange来挑选您的五个项目。

答案 1 :(得分:1)

对于Microsoft SQL Server(v2005 +),此查询语法将获得5个随机记录:

SELECT TOP 5 *
FROM table
ORDER BY NEWID()

答案 2 :(得分:1)

我在使用Railo(ColdFusion 9),TOPNEWID()都不在查询查询(QoQ)中工作。如果您碰巧涉及此用例,并且您必须按照QoQ行事,那么这是一个解决方案:

<cfquery name="randomizedQueryObject" dbtype="query" maxrows="10">
SELECT *, RAND() as rand
FROM someQueryObject
ORDER BY rand
</cfquery>

这会从较大的结果集中返回10个随机项,并在QoQ中工作。简短而简单。