如何通过不指定列名称来动态创建任何查询的下拉菜单



我正在创建一个 HTML 表单,该表单需要来自 SQL 数据库的查询值的下拉菜单。我不想对表单输入进行硬编码,但尽可能多地动态创建它们,但我注意到,当为查询制作下拉菜单时,选项需要指定的列名。这迫使我对每个下拉菜单进行硬编码,因为我需要为每个下拉菜单指定列名。指定列名是有意义的,因为查询可以有多个选定的列名,但我用于下拉菜单的查询每个只选择了一列名。

我试图用来解决这个问题的只是Coldfusion和HTML。

下面是硬编码的下拉菜单。

<select name = "REV_WC">
<option hidden disabled selected value>  </option>
<cfoutput query = "#application.REV_WC#">
<option value = "#REV_WC#"> #REV_WC# </option>
</cfoutput>
</select>

我想尝试做这样的事情(不确定正确的语法是什么(:

<select name = "Dd_NAME">
<option hidden disabled selected value>  </option>
<cfoutput query = "#db_query#">
<option value = "#db_query.value#"> #db_query.value# </option>
</cfoutput>
</select>

查询如下所示:

<cfscript>
application.REV_WC = application.myDB.execute(sql = "SELECT DISTINCT REV_WC FROM MY_TABLE").getResult();
</cfscript>

在大多数情况下,最好是明确的,但实现所需内容的方法是使用查询结果中的ColumnList作为数组表示法中的列名。

<option value = "#db_query[columnList][currentRow]#"> #db_query[columnList][currentRow]# </option>

如果总是有一列,那么你很好,但如果你想从列表中选择,你可以按索引选择它们。例如SELECT ValueColumn, LabelColumn...

<option value = "#db_query[listGetAt(columnList, 1)][currentRow]#"> #db_query[listGetAt(columnList, 2)][currentRow]# </option>

这样的东西可能符合你的目的。 从 3 个列表开始。

<cfscript>
tableNames = "t1,t2,t3,etc";
fieldNames = "f1,f2,f3,etc";
queryNames = "q1,q2,q3,etc";
</cfscript>

然后,循环浏览列表以运行查询并创建选择。

<cfloop from = "1" to = "#listlen(tableNames)#" index = "i">
<cfset thisTable = listGetAt(tableNames, i)>
<!--- same for fieldNames and queryNames --->
<cfquery name = "#thisQuery#">
select distinct #thisField# from #thisTable#
</cfquery>
<select name = "#thisTable#_#thisField#">
<cfoutput query = "#thisQuery#">
<option value = "#thisQuery.thisField#">"#thisQuery.thisField#"</option>
</cfselect>
</cfloop>

代码示例尚未经过测试,可能存在错误,但它应该显示总体思路。

最新更新