2011-06-03 141 views
0

我在编辑已经存在的代码,这就是为什么这个问题是按原样生成的。我试图使用已经存在的查询,并且不通过url添加更多的表单变量。过滤cfquery结果

所以我的问题:我有一个正在运行的查询,并且这个查询被用来填充页面上的两个下拉列表。一个列表是操作状态,另一个是实际操作位置。在页面开始时,我希望下拉菜单只能查询不同的结果,目前显示的是120+'AL'80+'MN'等。另外,我希望第二次下拉以获得仅含有特定状态作为他们的状态。

我知道我可以通过添加更多的查询和表单变量来做到这一点,但我想知道是否有一种方法来过滤cfquery中的结果。

+2

你调查了ColdFusion查询查询吗? http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec0e4fd-7ff0.html – orangepips 2011-06-03 17:52:26

+0

我还没有听说过他们,我现在就去调查一下。 – SomeoneRandom 2011-06-03 18:03:52

回答

1

这是我会做的。只显示状态首先下拉。

这对于一些示例代码会更容易,但这里有一个示例。还没有尝试过,但应该是一个好的开始。决不记得如何设置选择回没有选择......

第一个下拉

<cfoutput group= "state"> 
<option value= "#state#">#state#</option> 
</cfoutput> 

第二个下拉(S)

<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(); 


}); 
+0

因为我还是个新手,所以我不能100%确定那个javascript是做什么的。然而,在你的说明中,首先只显示状态下拉,这就是我正在做的事情。目前我使用的是仅用于转换到第二个下拉菜单的表单变量。我想知道如果在下拉列表中选择一个项目,在Coldfusion中检查什么是一种简单的方法。这种方式,因为状态下拉已经关闭了表单变量,我可以检查该列表以查看所选值是否为空,然后以这种方式显示。 – SomeoneRandom 2011-06-03 18:20:34

0

对第一个下拉菜单的另一个答案+1 - 只对输出进行分组(确保查询已正确排序)。

对于第二个下拉菜单 - 使用cfselect并查看绑定属性 - 您可以将它“绑定”到第一个下拉菜单。

0

这相当依赖于您的特定数据库设计......(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>