4

クエリのクエリを使用して特定の範囲の行を選択するにはどうすればよいですか?

例えば

<cfquery name="myQuery" maxrows ="20" startrow="12">
 SELECT *
 FROM   previous_query
 WHERE  row_numer >= 12
</cfquery>

そういうこと…

4

2 に答える 2

9

これはトリッキーなものでしたが、あなたの問題に興味をそそられました。私は解決策があるかもしれないと思います

必要な行の前にあるものをすべて削除してから、必要な行の後にあるものをすべて削除する関数を作成しました。

関数rowrange()は3つのパラメーターを取ります。1.使用しているクエリ名。2.必要な開始行3.必要な行数。

更新:私の友人のジョン・ウィッシュは、これを機能させるために実際にループを実行する必要はないと指摘しました。ループを削除すると、これがはるかにスケーラブルになります。

<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>
于 2012-07-11T19:27:45.657 に答える
0

CFでこれをネイティブに行うことはサポートされていないため、カウントを行うには、元のレコードセットに列を追加する必要があります。

SELECT ..., row_num AS Counter

Row_Numは、DBMSによって異なる場合があります。

于 2012-07-11T15:51:59.677 に答える