我正在编辑已经存在的代码,这就是为什么这个问题是按原样形成的。我试图使用已经存在的查询,而不通过url添加更多的表单变量。
所以我的问题是:我有一个正在运行的查询,这个查询用于填充页面上的两个下拉列表。一个列表是运行状态,另一个是实际运行站点。在页面的开头,我希望下拉菜单只显示与查询不同的结果,目前它显示的是120+"AL"80+"MN"等。此外,我希望第二次下拉菜单只包含将特定状态作为其状态的结果。
我知道我可以通过添加更多的查询和一个表单变量来实现这一点,但我想知道是否有一种方法可以在cfquery中过滤结果。
下面是我要做的。只显示状态下拉列表。
使用一些示例代码会更容易,但这里有一个示例。根本没有尝试过,但应该是一个不错的开始。永远不记得如何将选择设置回无选择。。。
第一个下拉
<cfoutput group= "state">
<option value= "#state#">#state#</option>
</cfoutput>
第二次下拉
<cfoutput group= "state" style= "display: none;">
<select id= "#site#" class= "site">
<option>Select a Site</option>
<cfoutput>
<option value= "#site#">#site#</option>
</cfoutput>
</select>
</cfoutput>
添加一些JavaScript。。。
$( "#state" ).change( function() {
$( ".site" ).each( function() {
$( this ).selected( '' ).hide();
} );
$( "select[id=" + $( this ).val() + "]" ).show();
} );
在第一个下拉列表的另一个答案上加1-只需对输出进行分组(确保查询顺序正确)。
对于第二个下拉列表-使用cfselect并查看bind属性-您可以将其"绑定"到第一个下拉列表。
这取决于您的特定数据库设计。。。(这里是MySQL示例…)然而,完全假设你有一个字段将充当PK来定义网站位置,例如ZipCode(我在这里使用它…),你可以简单地将cfquery转储到一个数组中,然后循环使用它来获得结果。。。
<cffunction name="getDistinct" access="public" returntype="array" hint="Displays a Single Entry based on the ZipCode for this demo ...">
<cfargument name="ZipCode" required="true" type="string" />
<cfset var q = "">
<cfset var result = arrayNew(2)>
<cfset i=0>
<cfquery name="q" datasource="#variables.dsn#" username="#variables.username#" password="#variables.password#">
SELECT DISTINCT Site, SiteName, State, ZipCode
FROM `THETABLE`
WHERE ZipCode = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.ZipCode#" maxlength="10">
ORDER BY Site ASC
</cfquery>
<cfloop index="i" from="1" to="#q.RecordCount#">
<cfset result[i][1] = q.ZipCode[i]>
<cfset result[i][2] = q.Site[i]>
</cfloop>
<cfreturn >
</cffunction>