问题
How would I select a specific range of rows using a query of queries?
e.g
<cfquery name="myQuery" maxrows ="20" startrow="12">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
that sort of thing...
回答1:
This was a tricky one but your problem intrigued me. I think I may have a solution
I wrote a function that delete everything prior to the rows you want and then deletes everything after the rows you want.
the function rowrange() takes 3 parameters. 1. the queryname you are working with. 2. the starting row you want 3. the number of rows you want.
UPDATED: My friend John Whish pointed out that I actually do not need to do the looping to get this to work. Removing the loops makes this much more scalable.
<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>
回答2:
Doing this natively in CF isn't supported, so you'll have to add a column in your original record set to do the counting for you.
SELECT ..., row_num AS Counter
Row_Num may vary based on your DBMS.
来源:https://stackoverflow.com/questions/11436148/selecting-a-row-range-from-a-query-of-queries