我有一个查询对象,例如,返回了十五行。出于所有意图和目的,我无法修改生成查询对象的SQL,但我需要按列对此查询对象进行排序。有没有办法在不使用外部库的情况下在ColdFusion 7中执行此操作?
编辑:我应该添加:我对此查询对象运行查询,并在此查询查询中执行了ORDER BY
子句。还有另一种方法吗?
答案 0 :(得分:13)
不,查询是您执行此操作的方式。还有其他一些方法可以追踪数据,但它们都是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>
答案 1 :(得分:12)
即使这个问题已经解决了,我想补充一点,你也可以使用底层的Java方法sort(),它只需要一行,你不需要为此添加UDF。代码将如下所示:
<cfset qQuery.sort(qQuery.findColumn("nameOfSortColumn"), TRUE)>
需要findColumn()调用来获取sort列的索引,因为sort()正在使用列索引而不是列名。第二个参数指定排序顺序:TRUE =升序,FALSE =降序。
优点:单线呼叫,比QoQ更快
缺点:排序限制为一列
底层Java类还有更多隐藏功能。有关更多信息,请参阅以下链接:
在Lucee(用4.5和5.2进行测试)中,这种方法也类似,甚至更简单:
<cfset qQuery.sort("nameOfSortColumn", "asc")>
希望,这给出了一些想法......
答案 2 :(得分: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>