2016-07-24 1 views
2

データベースにp1、p2、p3などのフィールドがいくつかあり、GetUserというクエリによって返されています。私はそれらの値をチェックしたいが、次のコードエラーは私に出てくる。私はGetUser.p#x#の書式設定が間違っていると確信していますが、私はそれを行う方法を理解できません。どんな助けでも大歓迎です。cfloopでフィールド名に変数を使用する

私の作品次のコードを、持っている...

<cfquery name="GetUser"> 
     SELECT id, p00, p01, p02, p03, p04, p05, p06 
     FROM users 
     where id = #session.user_id# 
    </cfquery> 

    <cfoutput query="GetUser"> 
     <cfif p01 is 1><li>Post 01</li></cfif> 
     <cfif p02 is 1><li>Post 02</li></cfif> 
     <cfif p03 is 1><li>Post 03</li></cfif> 
     <cfif p04 is 1><li>Post 04</li></cfif> 
     <cfif p05 is 1><li>Post 05</li></cfif> 
     <cfif p06 is 1><li>Post 06</li></cfif> 
    </cfoutput> 

は当然のことながら、これはこれを行うのひどい方法ですので、私は同じ結果を達成するために、次のようにのようなループをやってみたかった。

をこのエラーのBt
<cfloop index = "x" from = "1" to = "6"> 
     <cfif GetUser.p0#x# is 1><li>Post #x#</li></cfif> 
    </cfloop> 

アウト。だから私はこれを達成する方法を理解するために探しています。 QUERYNAME [ "COLUMNNAME"] [ROWNUMBER]が必要であることを示唆している同様の質問が

//があります。これは異なっており、より簡単です。わかりやすくするために編集された

+0

'getUser ['p0' + x]'は、クエリ内の動的変数の構文です。 –

+0

これは "あなたのクエリから"と言わなければならない。 –

+0

閉じるが、それほどではない。 <= "0" から= "9" までのcfloopインデックスは= "X">

  • ポスト0#xが#
  • エラーで \t結果:キャストすることができません[p0]文字列を数値に変換します。 – mck

    答えて

    0

    <cfquery name="getuser" datasource="STACK"> 
        Select * from stackoverflow 
    </cfquery> 
    
    <cfset fieldNumber = #ListLen(getuser.ColumnList)#> 
    <cfoutput> 
    <cfloop index="i" from="1" to="#fieldNumber#"> 
    This is P#i# 
    </cfloop> 
    </cfoutput> 
    

    あなたが戻ってきている列に基づく条件のチェックをしたいあなたのコメントからと思われます。列の名前が一貫していると仮定すると、返される列は常にループの反復と一致する必要があります。あなたはあなたが持っているものと同じくらい多くのフィールドをループする必要があります。そして、このようにして、10やその他のものをハードコードすることなく、常にこれを行うことができます。

    だからではなく、値がP1またはP2であるかどうかをチェックするの、あなただけの#i#を使用することができ、例えば:

    <cfif i is 1> P1 is here. </cfif>

    +0

    の代わりにする必要があったはずですが、私はもっと明確にする必要があると思います。私は私のテーブルに次のフィールド名を持っています:p0、p1、p2、p3など私はこのループでクエリのこれらのフィールドの値をチェックしています。そのため、p#x#はgetuser.p1を確認し、次にgetuser.p2を確認します。 pは変数ではありません。これはフィールド名の定数です。 – mck

    +0

    更新された回答。いくつかの精神的なワイヤーが交差し、何らかの理由でフォームフィールドをループしていると仮定しました。 – TRose

    +0

    こんにちは、私は何をしようとしているのかはまだ不明だと思います。私は、達成しようとしていることに関して非常に具体的な質問を更新しました。私の明確さの欠如のため申し訳ありません。 – mck

    1

    OK、それを得た...答えは:

    <cfloop index = "x" from = "1" to = "10"> 
        <cfif getUser['p0' & x] is 1><li> 0#x#</li> </cfif> 
    </cfloop> 
    

    Matt Buscheはほとんどそれを持っていました。 getUserメソッド[ 'P0' +は、x] OのgetUser [ 'P0' & X]

    おかげも必要!

    +0

    これは完全な作業コードですか?通常、動的クエリ列の参照には、行番号、つまり 'queryName [" columnName "] [rowNumber]'が必要です。例を見てください:http://trycf.com/gist/b304d69d93f16b4822a3455118fbc266/acf2016?theme=monokai – Leigh

    +0

    はい、それは完全な作業コードであり、重複としてマークされたものとは異なります。 – mck

    +0

    どちらのスレッドも、クエリ列に動的にアクセスする方法を尋ねます。答えは同じです:連想配列表記法を使用します。確かに、Lucee/Railoでは、クエリの行番号を省略することができます。 ACFはそうしない。上記のスニペットはコンパイルされません。終了CFIFタグがありません。 – Leigh

    関連する問題