4

私は立ち往生しています...これを機能させる方法を思い出せません。コード:

<cfquery name = "getsomething>
   select a, b, c
   from d
   where id = '1'
</cfquery>
<cfloop collection="#arguments#" item="argument">
    <cfif #StructFind(arguments, argument)# neq #getsomething.argument[0]#><!--- here's the problem --->
        do something
    </cfif>
</cfloop>

クエリは 1 つのレコードを返します。そのレコードの各列の値を取得する必要があります。列名は変数 (引数) です。どの構文を置き換える必要がありますか

 #getsomething.argument[0]#

? ありがとう。

4

1 に答える 1

7

いくつかの調整を行う必要があります。

「コレクション」引数を使用してループしているようです。これは、次のようなデータ構造を持っていることを意味します。

<cfset arguments = StructNew() />
<cfset arguments.a = 'x' />
<cfset arguments.b = 'y' />
<cfset arguments.c = 'c' />

この場合、値は重要ではないことがわかります。重要なのは、「コレクション」引数を使用して構造体を操作していることです。少し間違っていますが、仮定を進めましょう。

引数の値を動的に評価するのではなく、キーが必要です-- それらは列にマップされるため、次のようにループします。

<cfloop list="#StructKeyList(arguments)#" index="argument">

次に、次のコードが機能します。

<cfif StructFind(arguments, argument) neq getsomething[argument][1]>

この回答では、クエリ インデックスを 0 から 1 に変更したことに注意してください。cfquery 配列は 1 ベースであるため、最初の行は [0] ではなく [1] です。

于 2011-10-05T15:09:53.713 に答える