Php 难题:如何按特定列的特定和对行进行分组
如何将下面的行分成3组,其中美元的总数为10。必须使用所有行,且不得超过一次Php 难题:如何按特定列的特定和对行进行分组,php,mysql,Php,Mysql,如何将下面的行分成3组,其中美元的总数为10。必须使用所有行,且不得超过一次 row|dollars 1|1 2|1 3|1 4|1 5|1 6|1 7|3 8|4 9|7 10|10 许多可能的预期结果之一是 Row Group 1 = 10 Row Group 2 = 7,9 Row Group 3 = 1,2,3,4,5,6,8 额外学分: 当在数学上不可能得到每组10美元的总数时,有没有一个公式可以让我们最接近这个数字 我想也许sumdaular=10,或者,对于一个比较接近的解决方
row|dollars
1|1
2|1
3|1
4|1
5|1
6|1
7|3
8|4
9|7
10|10
许多可能的预期结果之一是
Row Group 1 = 10
Row Group 2 = 7,9
Row Group 3 = 1,2,3,4,5,6,8
额外学分:
当在数学上不可能得到每组10美元的总数时,有没有一个公式可以让我们最接近这个数字
我想也许sumdaular=10,或者,对于一个比较接近的解决方案,只是排序并将一行分配给一个组,但这并没有让我接近
有点涉及到这一点,但是,假设它们的行数可能达到数百万行,则会出现性能问题。
我被难住了
如果有帮助的话,我正在使用php和mysql。一个只有sql的解决方案是理想的,但是一些组合也会很好。谢谢你的建议
编辑:如果我不清楚,我想返回使这成为可能的行,而不仅仅是按它们分组。我认为您不能仅使用sql来完成这项工作,但它肯定会有所帮助。首先,我会使用select*这样的查询,从数据中查找数据,而数据中的美元不会像是他的多项式算法,甚至可以查找添加到特定值的子集。冷却液。它的记录是2百万,但我想我可以绕过它。谢谢
$dataset = [10,7,4,3,1,1,1,1,1,1];
$results = [];
function add_to_ten(&$data) {
$sum = 0;
$results = [];
foreach ($data as $index => &$datum) {
if ($datum == 0) {
continue;
}
if ($sum + $datum <= 10) {
$sum += $datum;
$results[] = $index;
$datum = 0;
}
if ($sum == 10) {
return $results;
}
}
}
print_r(add_to_ten($dataset));
print_r(add_to_ten($dataset));
print_r(add_to_ten($dataset));