2011-08-08 7 views
1

DBIx :: Classを使用してセット操作を実行する最良の方法は何ですか? 私のクエリに基づいて結果ソースを作成することが1つの解決策であることがわかりましたが、条件がユーザーによって定義され、最適な答えがその場で結果ソースを作成するかどうかはわかりません。DBIx :: Classでの操作の設定

SELECT pid FROM product WHERE code = 48 
INTERSECT 
(
    (SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'blue' 
    INTERSECT 
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'big' 
) 
    UNION 
    (SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'green' 
    INTERSECT 
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'small' 
) 
) 
+0

あなたが定義したと言っているのは、上記の9つのプレースホルダより多いか少ないかということですか? – cubabit

+0

はい、正確です。ユーザーは、(attr_name、value)と交点および共用体の組を使用して多数のフィルターを定義できます。 – nsbm

答えて

2

DBIx::Class::Helper::ResultSet::SetOperations何が必要だろう:

基本的に私はcodeattr_namevalueがユーザによって定義されDBICに、クエリのこのタイプを翻訳する必要がありますか?

+0

実際に私はこのDBICヘルパーを使用できません。なぜなら、いくつかのグループのプロジェクトでImと同じデータベーススキーマと同じDBICレイヤーを使用しているからです。このモジュールを使用するには、私のResultset Base Classを変更する必要があり、他のグループとの互換性を保つ必要があります。 – nsbm

関連する問題