如何使用查询查询选择特定范围的行?
e.g
<cfquery name="myQuery" maxrows ="20" startrow="12">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
那种事......
答案 0 :(得分:8)
这是一个棘手的问题,但你的问题引起了我的兴趣。我认为我可能有解决方案
我编写了一个函数,删除所需行之前的所有内容,然后删除所需行之后的所有内容。
函数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>
答案 1 :(得分:0)
不支持在CF中本地执行此操作,因此您必须在原始记录集中添加一列来为您进行计数。
SELECT ..., row_num AS Counter
Row_Num可能因您的DBMS而异。