Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何在ColdFusion 7中对查询对象进行排序?_Sorting_Coldfusion_Coldfusion 7 - Fatal编程技术网

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

Sorting 如何在ColdFusion 7中对查询对象进行排序?,sorting,coldfusion,coldfusion-7,Sorting,Coldfusion,Coldfusion 7,我有一个查询对象,比如说,返回了15行。出于所有目的,我不能修改生成查询对象的SQL,但我需要按列对该查询对象进行排序。在ColdFusion 7中有没有一种方法可以做到这一点而不必求助于外部库 编辑:我应该添加:我已经在这个查询对象上运行了一个查询,并且在这个查询的查询中执行了一个orderby子句。还有其他方法吗?没有,查询的查询是您执行此操作的方法。还有其他一些方法可以让你胡乱处理数据,但它们都很笨拙,不会像QoQ那样简单 QoQ(也称内存查询)的功能之一是,它可以用于任何返回查询对象的标

我有一个查询对象,比如说,返回了15行。出于所有目的,我不能修改生成查询对象的SQL,但我需要按列对该查询对象进行排序。在ColdFusion 7中有没有一种方法可以做到这一点而不必求助于外部库


编辑:我应该添加:我已经在这个查询对象上运行了一个查询,并且在这个查询的查询中执行了一个
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类有更多隐藏的特性。有关详细信息,请参阅以下链接:

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

<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>