0
SELECT    m.manufacturers_id, m.manufacturers_name,
          op.products_price,
          op.products_quantity,
          p.products_cost.....

I have these fields and I need to perform php arithmetic on the results, but keep them grouped based on their m.manufacturers_id. This is the format of the result I need or desire.

Array(
    [m.manufacturers_id]
        [m.manufacturers_name]
            [brands_total_sales ]
            (sum of all the products_price * qty for the products in this manufacturers_id)
            [products]
                [0] =>
                    [op.products_price] = ''
                    [op.products_quantity] = ''
                    [p.products_cost] = ''
                [1] =>
                    [op.products_price] = ''
                    [op.products_quantity] = ''
                    [p.products_cost] = ''
                [2] =>

Then that repeats for all the products per unique manufacturers_id. I guess basically the question is, is there a php function to manipulate an array of results to "sort" or "group" into manufacturers_id

Thanks in advance, an help or advise is greatly appreciated.

2 Answers 2

2

php script

<pre>
<?php

// Data Source
$db_data = array(
    array('manufacturers_id' => 1, 'manufacturers_name' => 'Some Company', 'products_price' => 1.99, 'products_quantity' => 12, 'products_cost' => 0.49),
    array('manufacturers_id' => 1, 'manufacturers_name' => 'Some Company', 'products_price' => 1.99, 'products_quantity' => 12, 'products_cost' => 0.49),
    array('manufacturers_id' => 2, 'manufacturers_name' => 'Another Company', 'products_price' => 12.99, 'products_quantity' => 112, 'products_cost' => 10.49),
    array('manufacturers_id' => 2, 'manufacturers_name' => 'Another Company', 'products_price' => 12.99, 'products_quantity' => 112, 'products_cost' => 10.49),
);

// Sort Data
$db_data_sorted = array();
foreach ($db_data as $data) {
    $db_data_sorted[$data['manufacturers_id']][$data['manufacturers_name']]['brands_total_sales'] += (intval($data['products_quantity']) * floatval($data['products_price']));
    $db_data_sorted[$data['manufacturers_id']][$data['manufacturers_name']]['products'][] = array(
        'products_price' => $data['products_price'],
        'products_quantity' => $data['products_quantity'],
        'products_cost' => $data['products_cost']
    );
}

// Debug
print_r($db_data_sorted);

?>

output:

Array
(
    [1] => Array
        (
            [Some Company] => Array
                (
                    [brands_total_sales] => 47.76
                    [products] => Array
                        (
                            [0] => Array
                                (
                                    [products_price] => 1.99
                                    [products_quantity] => 12
                                    [products_cost] => 0.49
                                )

                            [1] => Array
                                (
                                    [products_price] => 1.99
                                    [products_quantity] => 12
                                    [products_cost] => 0.49
                                )

                        )

                )

        )

    [2] => Array
        (
            [Another Company] => Array
                (
                    [brands_total_sales] => 2909.76
                    [products] => Array
                        (
                            [0] => Array
                                (
                                    [products_price] => 12.99
                                    [products_quantity] => 112
                                    [products_cost] => 10.49
                                )

                            [1] => Array
                                (
                                    [products_price] => 12.99
                                    [products_quantity] => 112
                                    [products_cost] => 10.49
                                )

                        )

                )

        )

)
Sign up to request clarification or add additional context in comments.

2 Comments

This is exactly what I wanted. What would be the best way of getting around to summing them all and returning just the sums for each brand (aka all the (prices * qty) - (prices * qty) to get a total profit for each brand)? Just doing the arithmatic in the foreach?
can you show me an example expected output (like in your question) of what you are after for the "sums" and I can provide a sample.
0

Maybe something like :

$response = array();
while($row = mysql_fetch_array($result))  {
   $response[$row['m.manufacturers_id']][$row['m.manufacturers_name']][$row['op.products_id']] = array(
    $row['op.products_price'],
    $row['op.products_quantity'],
    $row['p.products_cost']);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.