3

以下のようなクエリがあるとします。結果がいくつになるかわからない場合、各値を配列に入れる最良の方法は何でしょうか? 通常、ループでこれを行いますが、結果がいくつあるかわかりません。最初に結果をカウントするために別のクエリを実行する必要がありますか?

<CFQUERY name="alllocations" DATASOURCE="#DS#">
    SELECT locationID 
    FROM   tblProjectLocations
    WHERE  projectID = '#ProjectName#'
</CFQUERY>
4

3 に答える 3

7

配列で何をしたいかによっては、ほとんどの配列操作で列を直接参照することができます。次に例を示します。

i = arrayLen(alllocations["locationID"]);

その表記法を使用すると、ほとんどの配列操作で機能します。

これは「配列を作成する」わけではないことに注意してください。これは単にクエリの列の問題です。オブジェクトは、配列が必要なcoldfusion.sql.QueryColumnときに CF がオブジェクトを 1 つに変換できるように、CFML 配列に十分近いです。したがって、列を配列関数に渡すことができます。

できないことはこれです:

myArray = q["locationID"];

これは、デフォルトでCF がq["locationID"]可能であれば文字列として扱い、文字列値がクエリのlocationID列の最初の行にあるためです。q配列が実際に必要な場合にのみ、 CF はそれを代わりに配列に変換します。これは基本的にルーズタイピングがどのように機能するかです。

したがって、クエリ列を配列を期待する関数に渡すだけの場合は、上記の構文を使用できます。実際に列を変数に入れたい場合は、次のようにする必要があります。

myArray = listToArray(valueList(q.localtionID));

<cfqueryparam>注意:フィルター値を SQL ステートメントにハードコーディングするのではなく、必ず使用してください。

于 2013-05-08T11:57:22.980 に答える
0

クエリから 1 つのフィールド値のみを取得しているため、ValueList()を使用してクエリ結果をカンマ区切りの locationIds のリストに変換し、listToArray()を使用してそのリストを配列に変更できます。

クエリから複数のフィールド値を取得する場合は、クエリをループし、指定された行からすべてのフィールド値を構造体にコピーしてから、arrayAppend()を使用してその構造体を配列に追加します。

(これらの機能に慣れていない場合は、Adobe ドキュメントまたはcfquickdocs.comで調べることができます)。

于 2013-05-08T11:52:47.173 に答える