3

我有一个查询对象,例如返回十五行。出于所有意图和目的,我无法修改生成查询对象的 SQL,但我需要按列对该查询对象进行排序。有没有办法在 ColdFusion 7 中做到这一点而不求助于外部库?

编辑:我应该补充:我已经在这个查询对象上运行了一个查询,并ORDER BY在这个查询的查询中做了一个子句。还有另一种方法吗?

4

3 回答 3

14

不,查询查询是您执行此操作的方式。还有其他方法可以让您随意处理数据,但它们都很笨拙,不会像 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>
于 2009-07-22T17:10:26.477 回答
12

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

<cfset qQuery.sort(qQuery.findColumn("nameOfSortColumn"), TRUE)>

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

优点:一条线通话,比QoQ快

缺点:排序仅限于一列

底层 Java 类还有更多隐藏的特性。有关更多信息,请参阅以下链接:

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

<cfset qQuery.sort("nameOfSortColumn", "asc")>

希望,这提供了一些想法......

于 2010-08-27T08:04:49.200 回答
0

请检查下一个网址

http://www.coldfusioncookbook.com/entries/How-do-I-resort-a-query.html

<cfquery name="original" datasource="foo" >
  select name, age, rank
  from people
  order by age asc
</cfquery>

<!--- Resort by name --->
<cfquery name="newQuery" dbtype="query">
  select name, age, rank
  from original
  order by name asc
</cfquery>
于 2011-08-18T03:49:45.097 回答