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おそらくまたなど) に列があり、値 100、200、300 などは?の列の行の値です。そして、単一行のクエリですか? そうですか?200300valueIDqry2qry1

動的文字列に列の名前がある場合は、次の構文を使用します。

queryName[columnName][rowNumber]

はクエリqueryNameである変数、 は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)#

UPDATE Adam Cameronの回答で述べたように。この関数は避けるようにしてくださいevaluate()。これはかなりのパフォーマンス ヒットであり、良い習慣とは見なされません。代わりに、次のコードを使用してください (これは Adam Cameron の回答からコピーされたものです)。

#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 に答える