3

不确定这是否可能。我想做的是通过查询构建输出字符串。我正在连接输出“名称”并将“值”附加到末尾。然后输出字符串。我不认为这是可能的。但我正在寻找任何替代方案。

所以这就是我所拥有的:

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

4

3 回答 3

14

所以基本上 - 给定你的例子 - 你有一个qry1名为100(等,也许还有200300等等)的列,值 100、200、300 等是列中的行valueIDqry2?并且qry1是单行查询?是对的吗?

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

queryName[columnName][rowNumber]

wherequeryName是查询的变量,是columnName保存列名的字符串,rowNumber是行号(实际数字或包含一个的变量)。

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

<td>#variables.qry1[variables.qry2.valueID][1]#</td>

没有必要使用evaluate()它来执行此操作,在这里也不是一个好的解决方案。evaluate()自 CF5 时代以来,很少需要在 CFML 中使用。

我不知道您的数据结构是如何变成现在这样的背景的,但是如果您需要编写您建议您需要的那种代码......我会很长时间地努力研究如何你在做事。

于 2013-01-18T11:23:40.810 回答
4

您尝试做的事情是可能的,但您需要先构建一个变量名。

代替

<cfset test = variables.qry1. & variables.qry2.#valueID#>

尝试

<cfset test = "variables.qry1.#variables.qry2.valueID#">

然后将进行测试variables.qry1.[valueID value]。请注意,[valueID value] 是从查询中返回的内容,因此是变量中的实际值。

然后显示 的值variables.qry1.[valueID value]

#evaluate(test)#

更新正如亚当卡梅伦的回答所述。你真的应该尽量避免使用这个evaluate()功能,它会影响性能,而不是被认为是好的做法。而是使用以下代码(这是从亚当卡梅隆的回答中复制的)

#variables.qry1[variables.qry2.valueID][1]#

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

于 2013-01-18T10:30:58.503 回答
0

亚当有正确的解决方案。这是您的原始代码的修改版本,可以执行我认为您正在尝试做的事情。

<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>
于 2013-01-18T12:31:29.273 回答