sql - 如何随机分配结果集的一部分顺序?

标签 sql coldfusion coldfusion-10

我正在使用ColdFusion 10。

我有一个无法更改的查询。我无法更改SQL。正在从多个位置(包括ajax)调用查询。我只能触摸结果集输出的内容。

我需要在当前结果集中随机分配新产品的顺序。新产品将永远列在第一位。我将一次最多输出50个产品。可能有多达50种新产品。因此,结果集将永远不会像一百万行那样庞大。

可以说我当前的结果集如下所示:

ProductID, IsNew
1          T   
2          T 
3          T 
4          F 
5          F  
6          F

我的目标是使新产品随机化,并使旧产品保持现有顺序。因此,我的新结果集可能如下所示:
ProductID, IsNew
3          T   
1          T 
2          T 
4          F 
5          F  
6          F

我的想法是遍历结果,找到新产品(始终会首先列出它们),将它们添加到列表中,对列表进行随机化,然后以某种方式操纵结果集以使用随机化列表。有点像这样:
// create empty list
NewProductsList = "";
// loop through results and add new products to list
NewProductsList = "1,2,3";
// randomize list of new products
NewProductsList = "3,1,2";

我的想法是使用queryAddRow()和querySetCell()函数重写结果。有没有一种方法可以在输出时使用ColdFusion操作结果集的顺序?

最佳答案

我现在还没有CF的副本,但是这与Dan的解决方案略有不同,该实现应该可以使用,但目前尚未经过测试。

<cfset QueryAddColumn(myQuery,"sortCol","Decimal")>
<cfloop query="myQuery">
    <cfif myQuery.IsNew>
      <cfset myQuery.sortCol = Rand()> <!--- will be 0-1 --->
    <cfelse>
      <cfset myQuery.sortCol= myQuery.CurrentRow+1> <!--- will always be 2 or greater --->
    </cfif>
</cfloop>

<cfquery name="sorted" dbtype="query">
select * from myQuery order by sortCol
</cfquery>

关于sql - 如何随机分配结果集的一部分顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905987/

相关文章:

mysql - 获取包含在表中找到最少次数的项目的列表

php - SQL子查询从不同的表获取信息

mysql - 左连接没有返回正确的信息

redirect - 书签页面重定向

coldfusion - ColdFusion 中的错误处理 LT

java - 使用 UTF-8 和 ASCII 检查文件时使用 Coldfusion FileExists 时出现问题

excel - 无法使用 ColdFusion 创建正确的 Excel 电子表格

MySQL 选择使用组和计数连接表

coldfusion - 使用 onMissingMethod 无法访问对象变量

iis - 使用 IIS 设置 Coldfusion 10 - 无法配置 IIS 连接器