0

クエリの配列を 1 つのクエリにマージしたい

私はこれを試しました

<cfquery name="MergedData" dbtype="query">
    <cfloop from="1" to="#arrayLen(arData)#" index="k"> 
        SELECT *
        FROM    arData[k]
        <cfif k LT ArrayLen(arData)>UNION</cfif>
    </cfloop>
    ORDER BY EID
</cfquery>

次のようなエラーが表示されます

<br><b>Query Of Queries syntax error.</b><br> Encountered "[k]. 
4

4 に答える 4

2

配列をループする別の方法を試してください。SQLステートメントに「UNION」を追加し続ける必要があるかどうかのロジックを理解するには、独自のカウンターを作成する必要があります。

<cfset i = 1>
<cfquery name="MergedData" dbtype="query">
    <cfloop index="k" array="#arData#"> 
        SELECT *
        FROM    k
        <cfif i LT ArrayLen(arData)>UNION</cfif>
        <cfset i++>
    </cfloop>
    ORDER BY EID
</cfquery>

注意: Adob​​e CF の代わりに Railo を使用している場合は、カウンターを自分で計算する必要はありません。Peter が上記のコメントで述べたように、両方indexを行うことができます。item

<cfloop index="i" item="k" array="#arData#"> 
于 2014-02-03T09:25:21.277 に答える
1

関数型プログラミングでこれを実現したい場合は、Underscore.cfc ライブラリを使用できます(CF 10 以降または Railo 4 以降が必要です)。

// instantiate Underscore library
_ = new Underscore();

// convert the array of queries to a single array of structs
mergedArray = _.reduce(arrayOfQueries, function (memo, query) {
  // convert current query to an array of structs
  //   and concatenate it to the rest of the result
  return _.concat(memo, _.toArray(query));
}, []);

// convert the array of structs back to a query
mergedQuery = _.toQuery(mergedArray);

このソリューションはreduce()、クエリの配列を構造体の単一の配列に結合するために利用します。に渡された無名関数は、 をreduce()使用してクエリの配列内の各クエリを構造体の配列に変換し、その配列をtoArray()構造体の残りの配列 (memo値) と連結します。

クエリの配列が構造体の単一の配列に変換されると、それを を使用してクエリに戻すのは簡単なことですtoQuery()(それが必要であると仮定します)。

注: Underscore ライブラリを作成しました

于 2014-02-04T04:57:16.530 に答える
0

これが最終的に機能するものです

<cfquery name="local.qryMergedData" dbtype="query">
    <cfloop array="#arguments.Data#" index="k">
        <cfset local.currentIndex++>
        <cfset setvariable("Data_#local.currentIndex#", k)>

        SELECT *
        FROM   Data_#local.currentIndex#
        <cfif local.currentIndex LT local.MaxIndex>UNION</cfif>
    </cfloop>
    ORDER BY EID
</cfquery>  

内に変数を設定するのは本当に好きではありません<cfquery>が、少なくともそれは 1 つのクエリにすぎません

于 2014-02-03T16:51:19.823 に答える