cfloop:クエリに対するループ

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

説明

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

シンタックス

<cfloop
query = "query name"
startRow = "row number"
endRow = "row number"
group = "Query column">
</cfloop>
<cfloop query = "query name" startRow = "row number" endRow = "row number" group = "Query column"> </cfloop>
<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>
<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>
<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>
<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>
<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>
<cfquery name = "GetTemplate" dataSource = "Library" maxRows = "5"> SELECT TemplateName FROM Templates </cfquery> <cfloop query = "GetTemplate"> <cfinclude template = "#TemplateName#"> </cfloop>
<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>
<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>
<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>
<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>
<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#"/>
<!--- 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#"/>
<!--- 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#"/>

出力

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

 

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

ヘルプをすばやく簡単に入手

新規ユーザーの場合