使用PHP5.2和MySQL 4.1.22寻找一种清洁,高效的方式对一组数据的对阵已知模式
我遇到的东西,起初,出现了简单但一直回避我关于简单,干净的解决方案。
我们已经预先定义了产品的“包装”。包装1可能包含产品A,B和C.包2可能有A,C,D和G等等。这些包装的尺寸范围从3到5种不等。
现在,客户可以选择任何可用的10种产品并制作“定制”包装。由于我们已经有一些预定义的软件包,因此我们希望尽可能使用较小的现有软件包构建自定义软件包(以便于运输)。因此,例如,客户选择创建产品A,B,C,D,E和F的“定制包装”。我们已经有一个预定义的包装,其中包含A,B和C,称为Foo。因此,订单将是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,我受限于只有一层子选择可用(据我所知)。所以这种类型将需要在PHP中执行。我研究过使用array_intersect()来确定匹配,但随着预定义软件包的数量呈线性增长,我发现每种方式都会以指数方式增长。
我跑了一些其他编码器的朋友,再次,虽然它似乎应该有一个简单的答案,我们都发现它并不像看起来那么简单。所以,我想我会在这里发布它作为一个很好的面条担架。非常感谢您的时间!
+1很好的问题,我不知道该怎么回答。我会很乐意看到有什么人想出 – 2009-04-09 22:07:20
你有多少产品,以及有多少预建包装?还有其他一些可能的解决方案/优化方案,我将详细说明,具体取决于这些方案的大小。 – 2009-04-09 22:15:46
此外,客户可以多次选择相同的产品吗? – 2009-04-09 22:23:21