如何在ColdFusion 7中对查询对象进行排序?

Hoo*_*ing 3 sorting coldfusion coldfusion-7

我有一个查询对象,比如返回十五行.出于所有意图和目的,我无法修改生成查询对象的SQL,但我需要按列对此查询对象进行排序.有没有办法在ColdFusion 7中执行此操作而无需借助外部库?

编辑:我应该添加:我对此查询对象运行查询,并ORDER BY在此查询查询中完成了一个子句.还有另一种方法吗?

ale*_*ale 14

不,查询是您执行此操作的方式.还有其他一些方法可以追踪数据,但它们都是kludgey,并不像QoQ那么简单.

QoQ(也称为内存中查询)的一个强大功能是它可以用于任何返回查询对象的标记返回的查询,例如CFDIRECTORY和CFPOP.

对于想知道如何进行查询查询的人来说,这很简单:

<cfquery name="resortQuery" dbtype="query">
    SELECT *
    FROM myQueryFromSomewhereElse
    WHERE
        COLUMN_NAME=<cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#myFilterValue#" />
    ORDER BY
        SOME_OTHER_COLUMN_NAME ASC
</cfquery>
Run Code Online (Sandbox Code Playgroud)


Seb*_*ner 12

即使这个问题已经解决了,我想补充一点,你也可以使用底层的Java方法sort(),它只需要一行,你不需要为此添加UDF.代码将如下所示:

<cfset qQuery.sort(qQuery.findColumn("nameOfSortColumn"), TRUE)>
Run Code Online (Sandbox Code Playgroud)

获取sort列的索引需要findColumn()调用,因为sort()正在使用列索引而不是列名.第二个参数指定排序顺序:TRUE =升序,FALSE =降序.

优点:单线呼叫,比QoQ快

缺点:排序限制为一列

底层Java类有更多隐藏的功能.有关更多信息,请参阅以下链接:

在Lucee(使用4.5和5.2进行测试),这也类似,甚至更简单:

<cfset qQuery.sort("nameOfSortColumn", "asc")>
Run Code Online (Sandbox Code Playgroud)

希望,这给了一些想法......

  • 这不再适用于ColdFusion 2016 - sort()函数已使用单个参数(比较器函数)重新实现.https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-mr/querysort.html#main-pars_header (2认同)