考虑表dbo.state_zip,其中包含列city,statecode并且zipcode,有超过80,000条记录。
属性 | 需要 | 类型 | 默认 | 描述 |
---|---|---|---|---|
询问 | 真正 | 串 | 查询对象的变量名。 | |
起始行 | 假 | 数字 | 查询对象的起始行索引。 | |
row | 假 | 数字 | 查询对象的结束行索引。 | |
组 | 假 | 串 | 对记录进行分组的查询列名称。 |
<cfquery name="geo" datasource="reotrans-dev"> SELECT city, stateCode, zipCode FROM dbo.state_zip </cfquery>
使用查询对象geo作为的来源cfloop。由于该表dbo.state_zip有很多记录,因此生成的HTML将花费一些时间。本示例仅显示前20条记录的HTML值。
<cfoutput> <ul> <cfloop query="geo"> <!--- Scope the column names with the query name. ---> <li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li> </cfloop> </ul> </cfoutput>
<ul> <li>100 PALMS | CA | 92274</li> <li>1000 PALMS | CA | 92276</li> <li>12 MILE | IN | 46988</li> <li>1ST NATIONAL BANK OF OMAHA | NE | 68197</li> <li>29 PALMS | CA | 92277</li> <li>29 PALMS | CA | 92278</li> <li>3 STATE FARM PLAZA | IL | 61710</li> <li>3 STATE FARM PLAZA | IL | 61791</li> <li>30TH STREET | PA | 19104</li> <li>3M CORP | MN | 55144</li> <li>65TH INFANTRY | PR | 00923</li> <li>65TH INFANTRY | PR | 00924</li> <li>65TH INFANTRY | PR | 00929</li> <li>65TH INFANTRY | PR | 00936</li> <li>7 CORNERS | VA | 22044</li> <li>88 | KY | 42130</li> <li>9 MILE POINT | LA | 70094</li> <li>A A R P INS | PA | 19187</li> <li>A A R P PHARMACY | CT | 06167</li> <li>A H MCCOY FEDERAL BLDG | MS | 39269</li> </ul>
要将查询的输出限制为特定的行范围,请指定startrow和endrow。
<cfloop query="geo" startrow="100" endrow="150"> <li>#geo.city# | #geo.stateCode# | #geo.zipCode#</li> </cfloop>
在示例数据中,相对于与每个州相关联的多个城市,同一州多次列出。您还可以看到多次列出与每个城市关联的多个邮政编码相关的同一城市。
让我们先按状态对输出进行分组。注意第二个cfloop包裹内容的实例,它将在stateCode分组的内容下输出。
<cfoutput> <ul> <cfloop query="geo" group="stateCode"> <!--- Scope the column names with the query name. ---> <li>#geo.stateCode# <ul> <cfloop> <li>#geo.city# | #geo.zipCode#</li> </cfloop> </ul> </li> </cfloop> </ul> </cfoutput>
从一个分组cfloop标签生成的HTML(摘录)。
<ul> <li>AK <ul> <li>KONGIGANAK | 99545</li> <li>ADAK | 99546</li> <li>ATKA | 99547</li> <!-- etc. --> </ul> </li> <li>AL <ul> <li>ALEX CITY | 35010</li> <li>ALEXANDER CITY | 35010</li> <li>ALEX CITY | 35011</li> <!-- etc. --> </ul> </li> <!-- etc. --> </ul>
最后,让我们按分组输出stateCode,然后按分组,city以查看zipCode每个城市的所有条目。请注意,第二个cfloop分组了city,第三个分组了cfloop以输出zipCode数据。
<cfoutput> <ul> <cfloop query="geo" group="stateCode"> <li>#geo.stateCode# <ul> <cfloop group="city"> <li>#geo.city# <ul> <cfloop> <li>#geo.zipCode#</li> </cfloop> </ul> </li> </cfloop> </ul> </li> </cfloop> </ul> </cfoutput>
从两个分组cfloop标签生成的HTML(摘录)。
<ul> <li>AK <ul> <li>ADAK <ul> <li>99546</li> <li>99571</li> </ul> </li> <li>AKHIOK <ul> <li>99615</li> </ul> </li> <!--- etc. ---> <li>BARROW <ul> <li>99723</li> <li>99759</li> <li>99789</li> <li>99791</li> </ul> </li> <!--- etc. ---> </ul> </li> <!--- stateCodes etc. ---> </ul>
<cfscript> for (x = 1; x LTE geo.recordcount; x = x + 1) { writeOutput( '<li>' & geo.city[x] & ' | ' & geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>'); } </cfscript>
<cfscript> for (x = 1; x <= geo.recordcount; x++) { writeOutput( '<li>' & geo.city[x] & ' | ' & geo.stateCode[x] & ' | ' & geo.zipCode[x] & '</li>'); } </cfscript>
使用FOR IN语法,x是查询行对象,而不是行索引。
<cfscript> for (x in geo) { writeOutput( '<li>' &x.city& ' | ' & x.stateCode& ' | ' &x.zipCode& '</li>'); } </cfscript>
ColdFusion 11允许将大多数标签写为cfscript。
<cfscript> cfloop(query: geo, startrow: 1, endrow: 2) { writeOutput( '<li>' &geo.city& ' | ' & geo.stateCode& ' | ' &geo.zipCode& '</li>'); } </cfscript>
用group。
<cfscript> cfloop(query: geo, group: 'city') { writeOutput( '<li>' &geo.city& '<ul>'); cfloop() { // 没有参数,就像标记语法一样。 writeOutput('<li>' &geo.zipCode& '</li>'); } writeOutput('</ul></li>'); } </cfscript>