使用下拉菜单和引用查询结果
Using dropdown menu and referencing query results
我希望这是一个简单的问题,我只是不知道如何 google 正确答案。
我有一个使用查询填充的下拉列表。
<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>
当用户从下拉列表中选择 'fruit' 时,是否可以引用与他们在另一个查询中选择的 'fruit' 相关联的 'size' 和 'color'?
例如:
<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”)以从 selected 水果中获取这些属性的方式就像这样。
<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>
然后将 <cfselect>
中的值属性更改为 value="sizeColor"
,这将是前面提到的大小和颜色的逗号分隔列表。所以代码应该是
<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>
我希望这是一个简单的问题,我只是不知道如何 google 正确答案。
我有一个使用查询填充的下拉列表。
<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>
当用户从下拉列表中选择 'fruit' 时,是否可以引用与他们在另一个查询中选择的 'fruit' 相关联的 'size' 和 'color'?
例如:
<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”)以从 selected 水果中获取这些属性的方式就像这样。
<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>
然后将 <cfselect>
中的值属性更改为 value="sizeColor"
,这将是前面提到的大小和颜色的逗号分隔列表。所以代码应该是
<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>