MySQL には製品テーブルがあり、各行にはコンマで区切られたオプションの値を持つフィールドがあり、組み合わせてこの製品になります。以下のスキームでは、両方のテーブルを見ることができます。カンマ区切りの値を持つフィールドは option_ids です。これは、たとえば 2,5,6,23 または 4,2,76 のようになります。これらの番号は、オプション テーブルに存在するオプションです。
製品:
|product_id|name|description|option_ids|price|
オプション:
|option_id|type_id|label|group|pos|count|price|
取得する入力は、一意のオプションの配列です。このオプションのセットまたはそのサブセットを持つすべての製品を option_ids で見つけたいと考えています。
これを行う方法は、オプションの配列のすべての可能な組み合わせを得るために、オプションの配列のべき集合を生成することです。次に、「OR WHERE」ステートメントでこれらすべての組み合わせを照会する mysql クエリを生成します。
ここでの問題は、累乗が指数関数的に増加することです。そのため、16 個の一意のオプションの配列がある場合、累乗は 65536 の可能性の配列を提供します。これを適切に機能させるには、php のメモリ使用量を増やす必要がありましたが、クエリが非常に膨大になるため、MySQL の問題が発生しました。
この問題に取り組む別の方法はありますか?
十分な情報を提供したことを願っています。そうでない場合は、質問してください。
編集: サブセットを見つける必要があるため、3 番目のテーブルでも同じ問題が発生します... オプションの配列が 1 つの製品であるとは言いません。1 つの製品である場合もありますが、2 つまたは 3 つの製品である場合もあります。例: オプション 1,2 は製品 A を作成し、オプション 2,3 は製品 B を作成し、オプション 4,5,6 は製品 C を作成します。オプション配列 [1,2,4,5,6] がある場合、製品 A と C を見つけます。