2016-05-11 7 views
1

私はCFWheelsを使用しており、サブクエリを実行する方法を探しています。私はどのオプションが利用可能であるか知りたい。現在のところ、古いColdFusionクエリを使用してクエリを構築しており、実行中のクエリの膨大な文字列を追加しています。 CFWheelsモデルの機能を使用してよりクリーンなオプションがあるかどうかを知りたい。CfWheels:Subqueries Solution

私のテーブルには、次のとおりです。

enter image description here

そして、ちょうど:

select COUNT(tb1.formid) as number_of_submission, tb1.formid 
from (select formid, room, inspector 
from test_tbl 
group by formid, room, inspector) tb1 
group by tb1.formid; 

次表示されます。

enter image description here

が、私はテーブルの上にこのクエリを実行したいですちょっと精巧により、内側のクエリができます:

enter image description here

+1

'あなたが必要とする情報を与えてくれないでしょうか?formidによってcount_t(select formid)number_of_submissionsからtest_tbl groupを選択しますか? –

+0

いいえ、それは主にformidでグループ化すると、2つのフォームIDしかありません。なぜなら、各サブミッションを区別するのはユニークなformid、room、およびinspectorのユニークなセットなのです。 –

答えて

0

あり、グループ化機能は、次のようになりますモデルのために提供されています:

counts=model("test_tbl").findAll( 
    select="tb1.formid, COUNT(tb1.formid) AS publishCount" 
    , group="formid, room, inspector" 
); 

いますが、単一のグループを実行する方法を見つけることができない限り、結果を得ると、このようにモデルを使用することはできません。

他のオプションもありますが、これはあまり好ましくないと思われるかもしれません。

(デシベル)ビュー を使用する - 私はグループのこの種を持って行くいくつかのビューを持っている、と私は、これらの読み取り専用の相互作用のためのモデルを使用しています。欠点は、ロジックの中にはビューの一部があり、結果として変更を加えることがやや面倒であることです。

selectを使用してモデル内の関数として使用します。 - モデル内に選択関数を追加し、関数で使用可能にします。この種類のグループ化またはカウントにアクセスする場合は、test_tbl.getSubmissions()のようにモデルを呼び出します。このようにして、選択されたコードはIMOがコントローラとは対照的でなければならないモデルにあります。

私はしばらく前に、かなりの性能向上のために、たくさんのモデルを見て、複雑なマルチテーブル関係をselectに置き換えました。 selectを使うことは必ずしも悪いことではありません。

関連する問題