DBIx::Class を使用して集合演算を実行する最良の方法は何ですか? クエリに基づいて検索先を作成することが 1 つの解決策であることがわかりましたが、条件はユーザーによって定義されるため、その場で検索先を作成することが最善の答えであるかどうかはわかりません。
基本的に、このタイプのクエリを DBIC に変換する必要があります。ここでcode
、attr_name
とvalue
はユーザーによって定義されます。
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'
)
)