cfloop タグを使用して、クエリオブジェクトをループしたり、レコードのセットをグループ化したり、オブジェクトをループするに従ってクエリオブジェクトを変更したりします。

説明

クエリに対するループは、クエリレコードセット内のレコードごとに実行されます。結果はcfoutputタグと同様です。ループが繰り返されるごとに、現在行の列が出力されます。このcfloopタグは、cfoutputタグ内で使用できないタグをループします。

シンタックス

<cfloop 
    query = "query name" 
    startRow = "row number" 
    endRow = "row number" 
    group = "Query column"> 
</cfloop>

関連項目

cfabortcfbreakcfcontinuecfexecutecfexitcfifcflocationcfoutputcfswitchcfthrowcftry

詳しくは、『ColdFusion アプリケーションの開発』の cfloop および cfbreak を参照してください。

属性

属性

必須/オプション

デフォルト

説明

query

必須

 

ループを制御するためのクエリです。query 属性を使用する場合に、文字列の使用に加えて、次のコードに示すような動的な参照を使用できるようになりました。

<cfloop query="#getEmployees()#">

startRow

オプション

 

ループに含めるクエリの最初の行です。

endRow

オプション

 

ループに含めるクエリの最後の行です。

group

オプション

 

レコードのセットをグループ化するために使用するクエリ列です。データをソートする場合、隣り合う重複行は削除されます。1 つ以上のクエリ列で順序付けられたレコードセットを取得した場合に使用します。例えば、レコードセットが「Customer_ID」に従って順序付けられている場合は、「Customer_ID」に関する出力をグループ化できます。

 

<cfscript>
    myQuery = queryNew("id,name,amount","Integer,Varchar,Integer", 
                [ 
                        {id=1,name="One",amount=15}, 
                        {id=2,name="Two",amount=18}, 
                        {id=3,name="Three",amount=32} 
                ]); 
</cfscript>
<cfloop query = "myQuery"> 
    <cfoutput>#id#.#name#</cfoutput> <br/>
</cfloop>

出力

1.One 
2.Two 
3.Three 

cfloop タグでは、レコードセットの開始ポイントと終了ポイントを動的に指定してループを繰り返すこともできます。これにより、後続の n セットのレコードをクエリから取得します。この例では、MessageRecords クエリで返される 5 番目のレコードから 10 番目のレコードまでループします。

 

<cfscript>
    myQuery = queryNew("id,name,amount","Integer,Varchar,Integer", 
                [ 
                        {id=1,name="One",amount=15}, 
                        {id=2,name="Two",amount=18}, 
                        {id=3,name="Three",amount=32},
                        {id=4,name="Four",amount=37}, 
                        {id=5,name="Five",amount=79}, 
                        {id=6,name="Six",amount=26}
                ]); 
</cfscript>
<cfset Start = 3> 
<cfset End = 6> 
<cfloop query = "myQuery"
        startRow = "#Start#"
        endRow = "#End#"> 
    <cfoutput>#name# #amount#</cfoutput>
</cfloop>

出力

Three 32 Four 37 Five 79 Six 26

レコードがなくなるか、現在のレコードのインデックスが endRow 属性の値を上回ると、ループは停止します。次の例では、cfinclude タグを使用して、ページ名リストのクエリによって返されたページ群を 1 つのドキュメントに結合します。

<cfquery name = "GetTemplate" dataSource = "Library" maxRows = "5"> 
    SELECT TemplateName 
    FROM Templates 
</cfquery> 
<cfloop query = "GetTemplate"> 
    <cfinclude template = "#TemplateName#"> 
</cfloop>

cfloop でのグループの使用

次の方法でグループ属性を使用できます。

cfloop

<cfquery name = "result" datasource="cfcodeexplorer"> 
 SELECT ORDERID, CUSTOMERFIRSTNAME,STATE,CITY
 FROM ORDERS
 ORDER BY CITY
</cfquery> 

<cfloop query="result" group="CITY">
	<cfoutput>
		#result.CITY# <br/>
	</cfoutput>
</cfloop>

cfoutput

<cfquery name = "result" datasource="cfcodeexplorer"> 
 SELECT ORDERID, CUSTOMERFIRSTNAME,STATE,CITY
 FROM ORDERS
 ORDER BY CITY
</cfquery>

<cfoutput query="result" group="CITY">
	#result.CITY# <br/>
</cfoutput>

出力

Anytown 
Boston 
Cheyenne 
Colorado Springs 
Dallas 
Deadwood 
Denver 
Greeley 
Houston 
Kansas City 
Las Vegas 
Los Angeles 
New York 
Oakland 
Ogden 
Phoenix 
Santa Fe 
Scottsdale 
Seattle

また、オブジェクトをループするに従って、クエリオブジェクトを変更できます。次に例を示します。

 

<!--- Create the query object --->
<cfset names = queryNew("")/>

<!--- Add the name column --->
<cfset queryAddColumn(
    names,
    "Name",
    "cf_sql_varchar",
    listToArray("John,James,Jason,Jared")
)/>

<!--- Add another column  --->

<cfset queryAddColumn(
    names,
    "Salary",
    "cf_sql_integer",
    arrayNew(1)
)/>

<!--- Populate the Salary column with random values --->

<cfloop query="names">
    <cfset names["Salary"][names.currentRow]=randRange(50000,90000)/>
</cfloop>

<!--- Dump the array result --->

<cfdump var="#names#"/>

出力

cfloop-modify-1

次に示すように、属性グループを使用して、クエリオブジェクトを変更することもできます。

 

<cfset players = queryNew(
    "id, name, gender",
    "cf_sql_integer, cf_sql_varchar, cf_sql_varchar",
    [
        [ 1, "Ronaldo", "Male" ],
        [ 2, "Messi", "Male" ],
        [ 3, "Sharapova", "Female" ],
        [ 4, "Serena W", "Female" ],
        [ 5, "Hamilton", "Male" ]
    ]
) />

<cfoutput>
    <cfloop query="players" group="gender">
        <b>#players.gender#:</b>
        <cfloop>
            #players.name# <br/>
        </cfloop>
    </cfloop>
</cfoutput>

出力

Male: Ronaldo 
Messi 
Female: Sharapova 
Serena W 
Male: Hamilton 

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー