2017-04-30 20 views
1

"getvalues"というクエリがあります。このクエリは、(クエリが複数作成される)最後に数値を追加するたびに、さまざまな回数ループします。
例:getvalues1、getvalues2、getvalues3、getvalues(など)。つまり、私はすべてのこれらのクエリの合計レコード数を取得しようとしている。変数totalrecordsは、ループの外側で0に設定されます。その後、ループが実行されるたびに、現在のクエリのレコードカウントがtotalrecordsに追加されます。recordcountで変数を扱う方法

ここで問題となっているのは、八角形の配置です。私のようにそれを設定した場合:

<cfset totalrecords = totalrecords + #getvalues1.recordCount#> 

それは問題なく動作しますので、私はこれが問題であることを確実に知ります。私はこの質問には奇妙な文言場合

<cfloop from="1" to=#numberOfTables# index="q"> 
<cfquery name="getvalues#q#" datasource="mydb" 
</cfquery> 
<cfset totalrecords = totalrecords + #getvalues#q#.recordCount#> 
</cfloop> 

申し訳ありません。尋ねる方法はわかりませんが、私は私の質問を受け取りたいと思います。どんな助けでも大歓迎です。

+2

(編集)あなたは間違った検索語句を使用している必要があります。つまり、ほとんどのスコープ(変数、ローカル、URLなど)は構造体です。動的変数にアクセスするには、[連想配列表記](http://stackoverflow.com/questions/12920155/is-it-possible-to-have-dynamically-generated-query-names-in-coldfusion)を使用します。例、 'variables [" someVariable "&dynamicIndex] .recordCount'です。しかし、ループ内でクエリを実行することは素晴らしい考えではありません。より良い選択肢があるかもしれません。エンド・ゴールについて詳細を投稿することを検討してください(誰かがより良い選択肢を提案できるように)。 – Leigh

+0

私はこの質問への回答を提出するために@Leighを推薦します。彼女のコメントから、 'variables [" someVariable "&dynamicIndex] .recordCount' –

答えて

3

必要なすべてのデータを返すデータベースに対して1つのクエリを作成したくない/したくない理由がありますか?クエリ内でループを移動し、単一のSQL文でUNIONクエリを作成することができます。また、データベースによっては、同じことをしたストアド・プロシージャ/関数を記述することもできます。データベースへの単一の呼び出しを行い、必要なすべてのデータを返す必要があるが、それを必要とする集約は、可変回数のループと毎回データのセグメントの返却よりもずっと効率的です。

+1

また、レコードの総数が必要な場合は、何らかの' count(...) 'を使用してください。これにより、使用されない余分なデータを引き出す際に帯域幅を無駄にすることがなくなります。 – Leigh

1

あなたはevaluate()を使用することができます。

<cfset totalrecords = totalrecords + #evaluate('getvalues' & q & '.recordCount')#> 
+0

誰かが私になぜ投票が下がったのかを教えてもらえれば、私はそれを感謝するだろう。議論するつもりはなく、自分のアプリで間違っていることを知りたいだけです。 – Jules

1
<cfquery name="getTotals" dbtype="query"> 
    <cfloop from="1" to="#numberOfTables#" index="idx1"> 
     select count(pkID) from getvalues#idx1# as recCount 
     <cfif idx1 lt numberOfTable> 
      UNION 
     </cfif> 
    </cfloop> 
</cfquery> 

<cfquery name="getGrandTotal" dbtype="query"> 
    select sum(recCount) as GrandTotal from getTotals 
</cfquery> 

<cfoutput>#getGrandTotal.GrandTotal#</cfoutput> 
関連する問題