Sorting 如何在ColdFusion 7中对查询对象进行排序?
我有一个查询对象,比如说,返回了15行。出于所有目的,我不能修改生成查询对象的SQL,但我需要按列对该查询对象进行排序。在ColdFusion 7中有没有一种方法可以做到这一点而不必求助于外部库Sorting 如何在ColdFusion 7中对查询对象进行排序?,sorting,coldfusion,coldfusion-7,Sorting,Coldfusion,Coldfusion 7,我有一个查询对象,比如说,返回了15行。出于所有目的,我不能修改生成查询对象的SQL,但我需要按列对该查询对象进行排序。在ColdFusion 7中有没有一种方法可以做到这一点而不必求助于外部库 编辑:我应该添加:我已经在这个查询对象上运行了一个查询,并且在这个查询的查询中执行了一个orderby子句。还有其他方法吗?没有,查询的查询是您执行此操作的方法。还有其他一些方法可以让你胡乱处理数据,但它们都很笨拙,不会像QoQ那样简单 QoQ(也称内存查询)的功能之一是,它可以用于任何返回查询对象的标
编辑:我应该添加:我已经在这个查询对象上运行了一个查询,并且在这个查询的查询中执行了一个
orderby
子句。还有其他方法吗?没有,查询的查询是您执行此操作的方法。还有其他一些方法可以让你胡乱处理数据,但它们都很笨拙,不会像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>
挑选*
从我的查询到其他地方
哪里
列名=
订购人
某些列名称ASC
即使这个问题已经解决了,我想补充的是,您也可以使用底层的Java方法sort(),它只需要一行,不需要为此添加UDF。代码将如下所示:
<cfset qQuery.sort(qQuery.findColumn("nameOfSortColumn"), TRUE)>
获取排序列的索引需要findColumn()调用,因为sort()处理的是列索引,而不是列名。第二个参数指定排序顺序:TRUE=升序,FALSE=降序
优点:一路呼叫,比QoQ快
缺点:排序限制为一列
底层Java类有更多隐藏的特性。有关详细信息,请参阅以下链接:
<cfset qQuery.sort("nameOfSortColumn", "asc")>
希望,这会给你一些想法…请查看下一个url
选择姓名、年龄、等级
来自人们
按年龄排序asc
选择姓名、年龄、等级
从原来的
按名称订购asc
关于:“还有其他方法吗?”-你能告诉我为什么QoQ在这种情况下是不够的吗?Tomalak:由于一些情有可原的情况,这种情况会发生在查看页面上,这比函数调用更伤我的灵魂。是的,我自己也不喜欢这样做。无法创建UDF来包装QofQ吗?然后您只需在视图中调用该函数。我想这算不上什么罪过。FWIW Giancarlo Gomez在一篇文章中提到了这个线程。是否有关于CF9-10的升级功能的信息?这是否有任何性能缺点或优点?据我所知,这也应该工作到CF 10。这应该比查询的查询快,因为必须首先解释查询。不幸的是,我目前无法同时测试这两种方法来提供更精确的信息。@SebastianZartner谢谢你的提示,但不幸的是,我无法让它工作qryAddresses.sort(1,TRUE)
返回此错误:“在查询中找不到键[1],列为[addressID、memberID、createDate、lastUpdated、addressName等]。有什么建议吗?另外,我正在使用CF9,所以现在我认为它不受支持,因为qryAddresses.getColumnCount()
返回“查询没有匹配的方法/函数。getColumnCount()found”;但是,支持qryAddresss.findColumn()
。自ColdFusion 2016起,此功能不再有效-sort()函数已使用单个参数(比较器函数)重新实现。
<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>