Php 难题:如何按特定列的特定和对行进行分组

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,或者,对于一个比较接近的解决方

如何将下面的行分成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,或者,对于一个比较接近的解决方案,只是排序并将一行分配给一个组,但这并没有让我接近

有点涉及到这一点,但是,假设它们的行数可能达到数百万行,则会出现性能问题。 我被难住了

如果有帮助的话,我正在使用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));