Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于和的混合结果获取算法_Php_Mysql_Algorithm - Fatal编程技术网

Php 基于和的混合结果获取算法

Php 基于和的混合结果获取算法,php,mysql,algorithm,Php,Mysql,Algorithm,我有一个产品表,一个有特点,一个有产品和特点之间的联系 表“产品”的结构: +----+------+--------------+---------+---------+-----------+ |id |名称|最大数量|上午|晚上|下午| +----+------+--------------+---------+---------+-----------+ 和"特点": +----+----------------+ |id |特性| +----+----------------+ |1号

我有一个产品表,一个有特点,一个有产品和特点之间的联系

表“产品”的结构:

+----+------+--------------+---------+---------+-----------+ |id |名称|最大数量|上午|晚上|下午| +----+------+--------------+---------+---------+-----------+ 和"特点":

+----+----------------+ |id |特性| +----+----------------+ |1号| |2 |重量| |3 |长度| +----+----------------+ 以及产品和特性之间的连接“连接”:

+----+------------+-------------------+ |标识|产品|标识|特征|标识| +----+------------+-------------------+ 我需要得到一个产品的组合列表,其大小之和<100,重量之和<50,长度之和>30(100,50,30是变量,我只是作为示例发布)。每个产品都可以有多个最大“最大数量”(来自产品表),因此不是唯一的产品

我有两种方法:1。一个mysql查询,将返回我描述的所有内容;2.获取一大组结果,稍后在PHP中处理它们(使用数组操作)。我找不到合适的解决办法。如果你能帮我找到解决办法,那就太好了


作为奖励,我希望获得30%的产品,字段“上午”=1,30%的产品,字段“晚上”=1,40%的产品,字段“下午”=1

要获得符合您要求的结果,您可以执行以下操作:

计算每个产品的
每长尺寸
每长重量
比率(如果
长度
为零,则将其设置为无穷大)。然后首先分配具有最低加权最大值的产品。如果你没有得到一个列表的产品,达到长度限制而不超过你的重量或尺寸限制,没有合适的解决方案

这意味着您应该通过以下方式订购产品:

MAX(currentSize/currentWeight*(size/length),(weight/length))
其中,
currentSize
是列表中当前所有产品的总尺寸,
currentWeight
是列表中当前所有产品的总重量。每次将产品添加到结果列表后重新计算,然后添加该列表的第一个产品,直到达到长度限制


如果您想满足奖金限制,您可以将产品表拆分为三个单独的表,然后依次选择其中的一个产品(从下午表开始,每次从每个表中添加3个产品以接近30/30/40分销时,从下午表中选择第10个产品).

根据您的数据,可以选择多种满足您需求的产品。你只需要其中的一个,还是有进一步的限制?至于奖金-您还需要指定如果存在多个/无解决方案,应该发生什么。我需要其中的任何一个。如果存在多个解决方案,则应随机选择其中的几个。没有解决方案就没有这样的情况。虽然你可以说不应该有这样的情况,但你不能肯定总会有解决方案。想象一个产品表,其中每个产品的重量
>50
(无论出于何种原因)。那么你的上述限制将不会返回结果。顺便说一句,如果你不能将你的产品列表精确地拆分为这些值,那么30/30/40%的值会发生什么情况(假设有4种产品的列表满足你的要求-你如何将它们拆分为上午/晚上/下午?)谢谢。我理解比例部分,但有什么理由选择按长度划分而不是按尺寸或重量划分?你能写一个例子(即使有错误的查询)吗?拥有3个以上的特征怎么样?我不确定我是否得到了最后一个示例(什么是currentSize,currentWeight?)。我之所以除以长度,是因为长度是唯一需要大于某个限制的特征。因此,我建议将尺寸/长度或重量/长度比最低的产品添加到列表中,具体取决于已添加到产品列表中的产品的总尺寸/重量。为任意数量的特征解决这个问题并非易事。查看单纯形算法()以找到线性优化问题的解决方案。每次添加新产品后都需要计算currentSize和currentWeight,以便正确选择下一个产品。假设您有3种产品(长度均为20)。产品A重量为40,尺寸为20,产品B重量为5,尺寸为70,产品C重量为30,尺寸为60。尝试找出我建议的算法在不使用currentSize/currentWeight的情况下会做什么。 +----+----------------+ | id | characteristic | +----+----------------+ | 1 | size | | 2 | weight | | 3 | length | +----+----------------+ +----+------------+-------------------+ | id | product_id | characteristic_id | +----+------------+-------------------+
MAX(currentSize/currentWeight*(size/length),(weight/length))