Evi*_*mes 3 sql coldfusion coldfusion-10
我正在使用 ColdFusion 10。
我有一个无法更改的查询。我无法更改 SQL。该查询是从多个地方调用的,包括 ajax。我只能触及结果集中输出的内容。
我需要随机化当前结果集中新产品的顺序。新产品将始终列在第一位。我一次最多输出 50 个产品。新产品最多可达 50 种。因此,结果集永远不会很大,比如一百万行。
假设我当前的结果集如下所示:
ProductID, IsNew
1 T
2 T
3 T
4 F
5 F
6 F
Run Code Online (Sandbox Code Playgroud)
我的目标是随机分配新产品,并将旧产品保留现有顺序。因此,我的新结果集可能如下所示:
ProductID, IsNew
3 T
1 T
2 T
4 F
5 F
6 F
Run Code Online (Sandbox Code Playgroud)
我的想法是循环遍历结果,找到新产品(始终会首先列出),将它们添加到列表中,随机化列表,然后以某种方式操作结果集以使用随机列表。有点像这样:
// 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";
Run Code Online (Sandbox Code Playgroud)
我的想法是使用 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>
Run Code Online (Sandbox Code Playgroud)