2011-08-01 1 views
0

複数の入れ子ORとANDの条件で商品コレクションをフィルタリングする必要があります。私は純粋なSQL文を使用してこれを実行しようとしましたが、私はそれを行うことができると思いますが、今日の仕事を終えているので、ここの誰かがより良い解決策を知っていると思っていたので、明日目を覚まして答えます。addAttributeToFilterなどの関数を使用してMagentoコレクションの入れ子になったWhere節を作成する方法

私の問題はMage_Catalog_Model_Resource_Eav_Mysql4_Product_Collectionクラスによって提供さaddAttributeToFilter()メソッドが唯一の巣にwhere句を2回、それを可能にしていることである - ので、私は

(cond1 OR cond2 OR cond3) AND (cond4 OR cond5) AND cond6 

なく

cond1 AND (cond2 OR(cond3 AND cond4)) 

を持つことができます(または私はそれを行う方法を知らない)。

純粋なSQL文でプロダクトIDを取得し始めたので、「in」条件付きでaddAttributeToFilterを追加することができます。しかしMagento dbはそんなに混乱しています! googolテーブルを使ってすべての関係をトレースする必要があるまで、それは問題ありません。

私はZendコレクションオブジェクトに必要な機能がいくつかあると思っていましたが、私はZend(私の悪い)にあまり馴染んでいません。

だから、誰も私は300行のSQLクエリを書くことから救うだろうか?私はいつもそれをしたいと思っていましたが、私はそれを少し延期することができると思います:)。

乾杯、 Maćko

EDIT: 私は製品に関する情報を取得する必要がありますし、同様に、この組み合わせ状態にサードパーティのモジュールからのいくつかのカスタムオプションがあります:私は私がしなければならないだろうと思い対象年齢などそれはPHPの側では、私はそれがあまり好きではない - 今のところ、最初のフィルタリングが可能な37の製品がありますが、もしこれらの初期基準に合致する1000の製品があればどうなりますか?

答えて

2

あなたが取り出そうとしている情報をもう少し詳しくお聞きすることは参考になります。マゼンタには、われわれが指し示すことができる特定のデータ用のテーブルがいくつか作成されている可能性がありますが、それは個々のケースに大きく依存しています。

そうしないと、下位レベルのZend DBクラスを使用して条件を構築できますが、それはとにかくデータベースに抽象化を壊してしまいます。フラットカタログやその他の索引付けを見て、これらの例を見てください。

希望に役立ちます!あなたの懸念は何な限り多くのクエリを実行する際の効率があるよう

おかげで、 ジョー


が鳴ります。その場合は、テーブルを賢明に索引付けしてください(可能な限り少ないレコードを選択する索引と内部問合せを使用してください)。

ここでは、カスタムSQLクエリ(またはMagentoに似た再生成インデックス)のように聞こえるかもしれません。

+0

私は問題の詳細については、チップのおかげで提供します。 – Nebril

関連する問題