2012-03-04 2 views
0

Я использую datetime для хранения дат ввода новых данных для каждого поставщика. Используя следующий запрос, чтобы вытащить результаты:Перестроить массив для объединения перекрывающихся результатов

SELECT COUNT(id) AS addedCount, 
date(date_added) AS dateAdded, 
provider_name as provider 
FROM `table` WHERE `table`.`id` IN (SELECT `table`.`id` FROM `table` 
WHERE  `table`.`active` = '1') 

GROUP BY dateAdded 
ORDER BY dateAdded DESC 

массив выглядит следующим образом:

array(1343) { 
    [0]=> 
    array(3) { 
     ["addedCount"]=> 
     string(1) "2" 
     ["dateAdded"]=> 
     string(10) "2012-03-03" 
     ["provider"]=> 
     string(5) "Provider_1" 
    } 
    [1]=> 
    array(3) { 
     ["addedCount"]=> 
     string(1) "1" 
     ["dateAdded"]=> 
     string(10) "2012-03-03" 
     ["provider"]=> 
     string(5) "Provider_1" 
    } 
    [2]=> 
    array(3) { 
     ["addedCount"]=> 
     string(1) "1" 
     ["dateAdded"]=> 
     string(10) "2012-03-03" 
     ["provider"]=> 
     string(5) "Provider_2" 
    } 
    [3]=> 
    array(3) { 
     ["addedCount"]=> 
     string(1) "1" 
     ["dateAdded"]=> 
     string(10) "2012-03-03" 
     ["provider"]=> 
     string(5) "Provider_2" 

мне нужны результаты подсчета общей сложности «addedCount», где и «поставщик» матч «dateAdded» так что конечный массив выглядит следующим образом:

addedCount dateAdded provider 
3   2012-03-03 provider_1 
2   2012-03-03 provider_2 

Я попытался неустанно искать SO и восстановление массивов, но после многих часов, проведенных, я в конечном итоге восстановление массива в его первоначальном виде,

Спасибо заранее!

ответ

2

Вы можете использовать данные как indexe для того, чтобы сгруппировать похожие данные, например:

$groupArray = array(); 
foreach ($providerArr as $provider) 
{ 
    // Using the grouping info (date & name) as a key to our grouping array 

    $key = $provider[ 'dateAdded' ] . $provider[ 'provider' ]; 
    if (!isset($groupArray[ $key ])) 
    { 
     // Our grouping array does not have the specific combination of date & name yet 
     // so save the first occurance of data for this combination. 

     $groupArray[ $key ] = $provider; 
    } 
    else 
    { 
     // The unique combination of date & name already exists so just update the count 

     $groupArray[ $key ][ 'addedCount' ] += $provider[ 'addedCount' ]; 
    } 
} 

// Now print 

foreach ($groupArray as $data) 
{ 
    echo("{$data[ 'addedCount' ]} - {$data[ 'dateAdded'} - {$data[ '$provider' ]}<br/>"); 
} 
+0

отлично! Спасибо! Я сделал несколько крошечных корректировок для вывода данных в другой массив, и теперь он точно так же, как мне это нужно. Еще раз спасибо! – Mike

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