クエリのクエリを使用して特定の範囲の行を選択するにはどうすればよいですか?
例えば
<cfquery name="myQuery" maxrows ="20" startrow="12">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
そういうこと…
クエリのクエリを使用して特定の範囲の行を選択するにはどうすればよいですか?
例えば
<cfquery name="myQuery" maxrows ="20" startrow="12">
SELECT *
FROM previous_query
WHERE row_numer >= 12
</cfquery>
そういうこと…
これはトリッキーなものでしたが、あなたの問題に興味をそそられました。私は解決策があるかもしれないと思います
必要な行の前にあるものをすべて削除してから、必要な行の後にあるものをすべて削除する関数を作成しました。
関数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>
CFでこれをネイティブに行うことはサポートされていないため、カウントを行うには、元のレコードセットに列を追加する必要があります。
SELECT ..., row_num AS Counter
Row_Numは、DBMSによって異なる場合があります。