Dynamic Coldfusion动态查询输出

Dynamic Coldfusion动态查询输出,dynamic,coldfusion,concatenation,cfoutput,Dynamic,Coldfusion,Concatenation,Cfoutput,不确定这是否可行。我试图做的是通过查询构建一个输出字符串。我将连接输出“name”并将“value”附加到末尾。然后输出字符串。我认为这是不可能的。但我正在寻找其他选择 这就是我所拥有的: qry1是主要查询qry2获取要附加到字符串末尾的值。 因此变量test的值如下所示:“variables.qry1.100” 这对于qry1是有意义的,因为这是查询对象的一部分。因此,这个字符串将从数据库返回一个正确的值,因为有一个名为100的子查询 <cfoutput> <cfloop

不确定这是否可行。我试图做的是通过查询构建一个输出字符串。我将连接输出“name”并将“value”附加到末尾。然后输出字符串。我认为这是不可能的。但我正在寻找其他选择

这就是我所拥有的:

qry1
是主要查询
qry2
获取要附加到字符串末尾的值。 因此变量
test
的值如下所示:
“variables.qry1.100”

这对于
qry1
是有意义的,因为这是查询对象的一部分。因此,这个字符串将从数据库返回一个正确的值,因为有一个名为100的子查询

<cfoutput>
<cfloop query="variables.qry2">
    <cfset test = variables.qry1. & variables.qry2.#valueID#>
<td>#test#</td> 
</cfloop>
</cfoutput>

#测试#
非常感谢


JC

您的尝试是可能的,但是您需要首先构建一个变量名

而不是

<cfset test = variables.qry1. & variables.qry2.#valueID#>
更新如亚当·卡梅隆的回答所述。您应该尽量避免使用
evaluate()
函数,因为它对性能有很大影响,不被认为是一种良好的做法。相反,请使用以下代码(这是从Adam Cameron的答案中复制的)


注意:查看Adam Cameron的答案,以更好地描述正在发生的事情。

因此,基本上,以您的示例为例,您在
qry1
中有一列名为
100
(等,也可能是
200
300
等),以及值100200,300等是
qry2
valueID
列中的行值?而
qry1
是单行查询吗?是这样吗

如果列的名称为动态字符串,则使用以下语法:

queryName[columnName][rowNumber]
其中,
queryName
是作为查询的变量,
columnName
是保存列名的字符串,
rowNumber
是行号(实际数字或包含一个数字的变量)

因此,使用示例变量,您的代码应该是:

<td>#variables.qry1[variables.qry2.valueID][1]#</td>
#variables.qry1[variables.qry2.valueID][1]#
不需要使用
evaluate()
来执行此操作,在这里这不是一个好的解决方案。自从CF5问世以来,很少需要在CFML中使用
evaluate()


我不知道您的数据结构是如何形成的,但是如果您需要编写您建议的那种代码,您需要。。。我会仔细观察你的工作进展。

亚当有正确的解决方案。这里是您的原始代码的修改版本,它实现了我认为您正在尝试的功能

<cfoutput query="variables.qry1">
<tr>
<cfloop query="variables.qry2">
    <cfset test = variables.qry1[variables.qry2.valueID][variables.qry1.currentrow]>
    <td>#test#</td> 
</cfloop>
</tr>
</cfoutput>

#测试#

您到底需要输出什么?是否要将测试设置为动态变量名,然后输出该变量?是的,因此测试应读取#变量。qry1.100#等同于子查询名,然后输出子查询,因此为#变量返回的值可能为12324。qry1.100#因此,如果它不是动态的,它将只读取#变量。qry1.100#,这将从查询返回100价值我试图动态创建输出字符串,然后从查询中输出一个值。我已经添加了我的答案。但你为什么要这么做?使用一个查询输出值来选择另一个查询中的列似乎很奇怪。至少对我来说。我用它来动态创建一个输出到excel的报告。最后一组列名是动态的,可以更改或添加等,因此查询会生成列名,然后将子查询值分配给这些列。每个子查询都会动态创建并分配一个id。我使用该id返回值。Ah现在感觉到了。我担心你可能会为自己做更多的工作。非常感谢你分享你的知识,现在一切都很好:)对不起文森特:否决你。evaluate()几乎不应该成为现代CFML中任何建议解决方案的一部分。@AdamCameron。我更新了我的答案,以表明这是一种不好的做法,并补充说,人们更应该看看你的答案。希望提问者能看到这一点,那么多提问者会接受答案,而不会阅读任何其他答案。
queryName[columnName][rowNumber]
<td>#variables.qry1[variables.qry2.valueID][1]#</td>
<cfoutput query="variables.qry1">
<tr>
<cfloop query="variables.qry2">
    <cfset test = variables.qry1[variables.qry2.valueID][variables.qry1.currentrow]>
    <td>#test#</td> 
</cfloop>
</tr>
</cfoutput>