Search code examples
coldfusioncfquery

Selecting A row range from a query of queries


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


Solution

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