Coldfusion 从查询的查询中选择行范围
如何使用查询查询选择特定范围的行 e、 gColdfusion 从查询的查询中选择行范围,coldfusion,cfquery,Coldfusion,Cfquery,如何使用查询查询选择特定范围的行 e、 g 挑选* 从上一个查询 其中行数>=12 这类事情…在CF中本机执行此操作不受支持,因此您必须在原始记录集中添加一列来为您进行计数 SELECT ..., row_num AS Counter 行数可能因DBMS而异 这是一个棘手的问题,但你的问题引起了我的兴趣。我想我可能有个解决办法 我编写了一个函数,删除所需行之前的所有内容,然后删除所需行之后的所有内容 函数rowrange()接受3个参数。 1.您正在使用的queryname。 2.您想要的
挑选*
从上一个查询
其中行数>=12
这类事情…在CF中本机执行此操作不受支持,因此您必须在原始记录集中添加一列来为您进行计数
SELECT ..., row_num AS Counter
行数可能因DBMS而异 这是一个棘手的问题,但你的问题引起了我的兴趣。我想我可能有个解决办法 我编写了一个函数,删除所需行之前的所有内容,然后删除所需行之后的所有内容 函数rowrange()接受3个参数。 1.您正在使用的queryname。 2.您想要的起始行 3.所需的行数 更新:我的朋友John Whish指出,我实际上不需要做循环来让它工作。删除循环使其更具可伸缩性
<cfquery name="myQuery">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
<cfset rowRange(myQuery,7,4)>
<cfdump var="#myQuery#">
<cffunction name="rowRange" hint="return a range of rows from a given query">
<cfargument name="qObj" type="query" required="true">
<cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include">
<cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows">
<cfset var i = arguments.start+arguments.range-1>
<cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)>
<cfset arguments.qObj.removeRows(0,arguments.start-1)>
<cfreturn arguments.qObj>
</cffunction>
挑选*
从上一个查询
其中行数>=12
你不能选择TOP 20吗??coldfusions查询不支持TOP,另外,如果我想从记录集的任何部分检索20行,这是一个非常好的解决方案,我可以在多个位置实现。谢谢更新了代码:我的朋友John Whish指出,我实际上不需要做循环来让它工作。删除循环使其更具可伸缩性。今年我遇到了John whish,他担任CF.objective()。他告诉我应该将客户端迁移到SQL server上。我希望我可以,我将把这个函数添加到我的ms Access黑客库中。谢谢。哇,你就是那个还在使用Access的人;)不用担心,我们公司也是从那开始的。我本来会这么做的,但Ms Access不支持任何行数类型的功能。我通过使用queryAddColumn并在执行QoQ之前手动添加一个rownumber列来模拟它。这不完全正确,您可以轻松地操作可能是正确的查询,但是正如我在测试中发现的那样,在具有大型数据集的access数据库上运行子查询变得指数效率低下。。在CF中手动操作更快
<cfquery name="myQuery">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
<cfset rowRange(myQuery,7,4)>
<cfdump var="#myQuery#">
<cffunction name="rowRange" hint="return a range of rows from a given query">
<cfargument name="qObj" type="query" required="true">
<cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include">
<cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows">
<cfset var i = arguments.start+arguments.range-1>
<cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)>
<cfset arguments.qObj.removeRows(0,arguments.start-1)>
<cfreturn arguments.qObj>
</cffunction>