我正在使用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/