2013-05-24 7 views
-1

У меня есть база данных, в которой сохраняется размер каждой используемой службы. В моей таблице первая колонка для name_service, вторая для size. Так что мне нужно сделать, это поместить общий размер каждой службы, зная, что строки с тем же именем службы могут быть повторены!MySQL PHP заполняет пустой массив

$serviceCounts=array(); 

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

Ваш вопрос очень неясен. Чего вы хотите достичь? – vascowhite

+1

непонятно? но я получил точные ответы, которые мне нужны. – Falcon

ответ

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"; 
} 
+0

О, черт возьми, просто исправьте вопрос! это совершенно не нужно –

+0

@ Jon Спасибо! любая идея о том, как поместить результаты в график? – Falcon

+0

@STTLCU Я знаю, что вы имеете в виду, за исключением того, что я не могу сделать это с помощью запроса, у меня есть специальная база данных с не менее 144 таблицами и никаких ключей для суставов, поэтому формирование другого запроса с циклами займет больше времени, чем это , – Falcon

2

SQL Solution Заканчивать @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 и проверки в цикле, если эта служба уже установлена ​​в массиве или нет. В случае, если да - добавьте к нему размер новой строки, , иначе добавьте имя службы в качестве нового элемента и установите его размер.

+0

Вам нужно было бы явно удалить что-либо кроме буквенно-цифровых символов и символов подчеркивания из $ row ['name_service'], чтобы сделать имя переменной действительным, но +1 –

+0

oh hell no, просто исправьте запрос! это совершенно не нужно –

+0

@STTLCU, вы правы, добавите этот параметр. PhilCross - хорошая точка, это предположение, которое я сделал. –

1

Используйте функцию агрегации MySQL:

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

тестировался, возможно, придется переименовать sum(size) as sum_size.

+0

ЭТО! это ответ. На самом деле, ребята, PHP - это не всегда ответ. –

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); 
+0

О, черт возьми, просто исправьте вопрос! Это совершенно не нужно –

+0

Нет, это полезно в моем случае – Falcon

Смежные вопросы