我有一个查询对象,例如返回十五行。出于所有意图和目的,我无法修改生成查询对象的 SQL,但我需要按列对该查询对象进行排序。有没有办法在 ColdFusion 7 中做到这一点而不求助于外部库?
编辑:我应该补充:我已经在这个查询对象上运行了一个查询,并ORDER BY
在这个查询的查询中做了一个子句。还有另一种方法吗?
我有一个查询对象,例如返回十五行。出于所有意图和目的,我无法修改生成查询对象的 SQL,但我需要按列对该查询对象进行排序。有没有办法在 ColdFusion 7 中做到这一点而不求助于外部库?
编辑:我应该补充:我已经在这个查询对象上运行了一个查询,并ORDER BY
在这个查询的查询中做了一个子句。还有另一种方法吗?
不,查询查询是您执行此操作的方式。还有其他方法可以让您随意处理数据,但它们都很笨拙,不会像 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>
即使这个问题已经解决了,我想补充一点,你也可以使用底层的 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")>
希望,这提供了一些想法......
请检查下一个网址
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>