我希望这是一个简单的问题,我只是不知道如何在谷歌上搜索正确的答案。
我有一个使用查询填充的下拉列表。
<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT TOP 3 fruit, color, size FROM fruit_table
</cfquery>
<cfselect name="fruits" query="getFruits" display="fruit" value="fruit" selected="#form.fruit#" queryPosition="below" required="yes" >
<option value="">Select Fruit</option>
</cfselect>
当用户从下拉列表中选择“水果”以引用与他们在另一个查询中选择的“水果”相关联的“大小”和“颜色”时,是否有可能?
例如:
<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT vegetable FROM vegetable_table WHERE size = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.size#"> AND color = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.color#">
</cfquery>
谢谢!
当你的表单被提交时,该值form.fruits
将在没有color
和size
属性的情况下发布。因此,你重新编码<cfquery>
(我将其重命名为“getVegetables”)以从所选水果中获取这些属性的方式将是这样的。
<cfquery name="getVegetables" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT
vegetable
FROM
vegetable_table
WHERE (size, color) IN
(SELECT
size, color
FROM
fruit_table
WHERE
fruit = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits#">)
</cfquery>
顺便说一句,我不喜欢使用<cfselect>
或任何<cfform>
标签,但这不是你的问题。但是,我强烈建议你丢弃它并重构你的代码。
编辑(第二次尝试):
作为替代答案,如果你想传递size,color
用逗号连接并别名为sizeColor
表单的fruit
列而不是来自你的列<cfquery>
,那么你可以做的是将第一个 select 语句更改为
<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT TOP 3
fruit,
size || ',' || color AS sizeColor
FROM fruit_table
</cfquery>
然后将 value 属性更改为value="sizeColor"
in your<cfselect>
这将是上述逗号分隔的大小和颜色列表。所以代码将改为
<cfselect name="fruits" query="getFruits" display="fruit" value="sizeColor" selected="#form.fruit#" queryPosition="below" required="yes" >
<option value="">Select Fruit</option>
</cfselect>
然后你可以<cfquery>
将发布页面上的更改为这个。
<cfquery name="getVegetables" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT vegetable FROM vegetable_table
WHERE
size = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits.listGetAt(1)#"> AND
color = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits.listGetAt(2)#">
</cfquery>
谢谢,这正是我所设想的,但不知道如何实施。我现在正在尝试此操作,但遇到错误。当我使用逗号分隔值时,我收到错误“查询列无效或丢失...”,即使这些是来自 cfquery 的两个有效列,如果单独使用也能正常工作。有什么建议吗?
啊,这是因为我缺乏经验,
<cfselect>
不允许value
字段中的变量名,而是 SQL 选择语句中特定列的字符串文字。您可以做的是创建一个大小,逗号,颜色串联和别名的计算列,然后使用别名列size || ',' || color sizeColor
(例如(假定双管道是您的串联运算符))并sizeColor
用作您的value
属性。我会修改我的答案。您是一个聪明人user1203119,再次感谢您的帮助。