php5.2とMySQL4.1.22の使用
私は、最初は単純に見えたが、それ以来、単純でクリーンな解決策に関して私を回避してきた何かに出くわしました。
製品の「パッケージ」が事前に定義されています。パッケージ1には、製品A、B、およびCが含まれている場合があります。パッケージ2には、A、C、D、Gなどが含まれている場合があります。パッケージのサイズは3〜5製品です。
これで、顧客は利用可能な10個の製品を選択して、「カスタム」パッケージを作成できます。すでに特定の事前定義されたパッケージがあるので、可能な場合は(出荷を容易にするために)既存のより小さなパッケージを使用してカスタムパッケージを構築したいと思います。
したがって、たとえば、顧客は製品A、B、C、D、E、およびFの「カスタムパッケージ」を作成することを選択します。Fooと呼ばれるA、B、およびCを含む事前定義されたパッケージがすでにあります。したがって、順序はFoo、D、E、およびFになります。
キャッチは、個々のアイテムの量が最も少なく、次にパッケージの量が最も少ないことです。例えば:
カスタムパッケージ:A、B、C、D、E、F、G、H、I、J。
事前定義されたパッケージ(1):A、B、C、D、E
事前定義されたパッケージ(2):A、B、C
事前定義されたパッケージ(3):D、E、F
単純に最大の一致を取る場合、1つの(5pc)パッケージと5つの個別のアイテムがあります。パッケージ(2)も(3)も残りのアイテムで構築することはできません。
もっと深く見てみると、パッケージ(1)をビルドしないことで、代わりにパッケージ(2)とパッケージ(3)をビルドできることがわかります。つまり、2つのパッケージと4つの個別のアイテムがあります(このビジネスルールではより適切な選択です)。
私はMySQLを使用しているので、(私の知る限り)サブセレクトの1つのレイヤーしか使用できないという制約を受けています。したがって、このソートはphpで実行する必要があります。array_intersect()を使用して一致を判別することを検討しましたが、事前定義されたパッケージの数が直線的に増加するにつれて、処理に関して私が見つけたすべての方法が指数関数的に増加します。
私はこれを他の数人のコーダーの友人によって実行しましたが、簡単な答えがあるはずですが、私たち全員が思ったほど単純ではないことがわかりました。なので、ここに素敵なヌードルストレッチャーとして投稿しようと思いました。よろしくお願いします!