-1

我有一个数据库,其中保存了使用的每个服务的大小。在我的表格中,第一列为name_service,第二列为size。所以我需要做的是把每个服务的总大小,知道具有相同服务名称的行可能会重复!

$serviceCounts=array();

while ($row=mysqli_fetch_assoc($result))
{
    $size=$row['size'];
    $service=$row['name_service'];  
}
4

4 回答 4

2

SQL 解决方案 查看@Adder 解决方案。

PHP解决方案

循环前:

$services = array();

循环内部:

if(array_key_exists($row['name_service'] , $services))
{
  $services[$row['name_service'] += $row['size'];
}
else
{
  $services[$row['name_service'] = $row['size'];
}

您基本上使用了一个名为的新数组services,并在循环中检查此服务是否已在数组中设置。如果是 - 添加新行的大小,否则将服务名称添加为新元素并设置其大小。

于 2013-05-24T09:20:08.650 回答
1

使用聚合 mysql 功能:

SELECT sum(size) as size, name_service FROM services GROUP BY name_service;

未经测试,您可能需要重命名sum(size) as sum_size.

于 2013-05-24T09:21:12.863 回答
1
$serviceCounts=array();

while ( $row = mysqli_fetch_assoc($result) )
{
    $size=$row['size'];
    $service=$row['name_service'];  

    if (isset($serviceCounts[ $service ])) {
        $serviceCounts[$service] += $size;
    } else {
        $serviceCounts[$service] = $size;
    }
}

然后你可以这样做打印出服务名称和大小:

foreach ($serviceCounts as $name=>$size) {
    echo "$name: $size\n";
}
于 2013-05-24T09:21:22.493 回答
0

你的意思是这样的吗?

$serviceCounts=array();

while ($row=mysqli_fetch_assoc($result) {
    $size=$row['size'];
    $service=$row['name_service'];  

    if (isset($serviceCounts[$service])) {
        $serviceCounts[$service]+=$size;
    } else {
        $serviceCounts[$service]=$size;
    }

}

print_r($serviceCounts);
于 2013-05-24T09:22:50.017 回答