4

CF サイトで作業しており、MySQL テーブルからデータを取得する必要があります。

CFQuery をうまく作成して、返されたレコードを確認することはできますが、返されたレコードを取得してループし、各行の特定のフィールドからデータを取得するにはどうすればよいでしょうか。

if/end if などを書くことができますが、データへのアクセス方法を思い出せません。

-ジェイソン

4

5 に答える 5

10

firstname 列を持つ the_query という名前のクエリを作成したと仮定します。

<cfoutput query="#the_query#">
   #firstName# ... etc <br>
</cfoutput>
于 2009-01-09T19:15:42.203 に答える
8

既存のすべての回答/コメントはさまざまな側面に触れているように見えるため、これはこのすべての情報を 1 つの明確な説明に統合する試みです。
(この回答はコミュニティ wiki に設定されています。必要に応じて編集してください。)


クエリから変数にアクセスするには、次を使用します。

QueryName.ColumnName[RowNum]
QueryName["ColumnName"][RowNum]

これらは両方とも、クエリが作成された後の任意の時点で機能します。
どちらも内部で使用cfoutputして変数を表示したり、内部でcfset変数を割り当てたりできます。

2 番目のものは動的変数に役立ち、次のような変数を受け入れることができます。

QueryName[DynamicColumnName][RowNum]
QueryName["Partial#DynamicName#"][RowNum]
QueryName["Partial"&DynamicName][RowNum]

便宜上、クエリを手動でループする代わりに、次のようにします。

<cfloop index="CurrentRow" from="1" to="#QueryName.RecordCount#">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>

あなたは簡単に行うことができます:

<cfloop query="QueryName">
    <cfoutput>#QueryName.ColumnName[CurrentRow]#</cfoutput>
</cfloop>

さらにショートカットとして、次のことができます。

<cfoutput query="QueryName">
    #QueryName.ColumnName[CurrentRow]#
</cfoutput>

そして、 a<cfloop query="">または a の中にいるときは、次の<cfoutput query="">ように簡単に実行できます。

<cfoutput query="QueryName">
    #ColumnName#
</cfoutput>

ただし、この最後のショートカットは表示のみです。

<cfset ColumnName = "NewValue" />

これにより、元のクエリ データが変更されることはありません。代わりに、次のことを行う必要があります。

<cfset QueryName.ColumnName[CurrentRow] = "NewValue" />

これにより、クエリの結果が変更されます (ただし、データベースの値は変更されません)。


CF8 (Railo と OpenBD も) で実行された実際の SQL クエリを表示するには、次のようにします。

<cfdump var="#QueryName#"/>

また、クエリの結果と実行された実際の SQL の両方が表示されます。

CF7 で実際の SQL を表示するには、タグに を追加する必要がありresult="QueryInfo"ますcfquery。その後<cfdump var="#QueryInfo#"/>、SQL が表示されます。

于 2009-01-09T20:40:26.340 に答える
5

または、CFLOOP タグを使用して同様の効果を得ることができます。

たとえば、数量がゼロより大きい行の「価格」フィールドを合計したいとします。(ショッピングカートを想像してください)

<CFSET TOTAL=0>
<CFLOOP QUERY="the_query">
    <CFIF quantity gt 0>
        <CFSET TOTAL=TOTAL+PRICE>
    </CFIF>
</CFLOOP>

ちなみに、CFOUTPUTクエリパラメータでは、ハッシュマーク/シャープ記号/オクトソープの使用は推奨されていません

[編集:] クエリ スタックの内容をダンプするには、[cf_root]\wwwroot\WEB-INF\debug.cfm の "<!--- :: CFTimer :: --->" 行の前に追加します。

<CFIF IsDefined("DumpQueries") >
    <cfset DQ_Queries= QueryToArray( CFDEBUG_QUERIES ) />    
    <CFLOOP From="1" to ="#CFDEBUG_QUERIES.recordcount#" index="i">
        <CFSET DQ_Queries[i].BODY =  DQ_Queries[i].BODY >
        <CFSAVECONTENT Variable="dump_content">
        <CFDUMP Var="#DQ_Queries[i]#" Expand="NO" Label="#DQ_Queries[i].NAME#">
        </CFSAVECONTENT>
        <CFOUTPUT>#REReplaceNoCase(dump_content,"expand"">BODY</td>[[:space:]]*<TD>[[:space:]]*","expand"">BODY</td><td><PRE>")#</CFOUTPUT>     
    </CFLOOP>
</CFIF>
于 2009-01-09T19:21:15.003 に答える
2

これを行うにはいくつかの方法があります。上記のように、query 属性を指定して cfoutput を使用できます。「クエリ名.列名」を参照することもできます。

特定の行/列にアクセスする必要がある場合は、配列表記を次のように使用できます。

queryname.columnname[rownum]

(CF は 0 ではなく 1 から数えます)。動的列アクセスの場合は、次を使用できます

queryname[columnvariable][rownum]

columname が CF で不正な変数名 (8thCol など) である場合は、これを少し変更できます。

queryname['8thCol'][rownum]

それが役立つことを願っています。

于 2009-01-09T19:30:42.330 に答える
0

CFQUERY 内でクエリを定義したら、結果を CFOUTPUT タグ内に配置します。構文 #[クエリ名].[フィールド名]# を使用して、表示するフィールドを指定します。

于 2009-01-09T19:20:46.033 に答える