Szukam metody PHP, która pozwoliłaby mi obliczyć sumę 2 wartości. W moim przykładzie mam 3 stoły i chciałbym dodać tabelę 1 z Tabela 3, ponieważ mają taką samą stronę art.

enter image description here

$sql = 'SELECT SUM(quantity) AS qty, SUM(quantity) * price_cost - ((SUM(quantity) * price_cost) * discount) / 100 AS cost, articles_id AS id_article, combination_id AS declinaison FROM invoice_detail';

        if ($inventoryType == 'year') {
            $sql .= ' WHERE DATE_FORMAT(date_add, \'%Y\') = DATE_FORMAT(NOW(), \'%Y\')';
        } else {
            $sql .= ' WHERE DATE_FORMAT(date_add, \'%Y-%m\') = DATE_FORMAT(NOW(), \'%Y-%m\')';
        }
        $sql .= ' GROUP BY invoice_id, articles_id, combination_id';

$statement = $conn->prepare($sql);
        $statement->execute();
        $cm = $statement->fetchAll();

foreach ($cm as $key => $item) {
        // Calcul du CUM

        dump($item);
}

Zasadniczo jeśli jest w pętli tego samego ID_Article i tego samego ID_DECLinaison musimy sumować wszystkie wartości kolumny "Koszt" w moim przykładzie chciałbym zatem zwrócić tablicę, która wygląda tak:

3_1 => [
'cost' => 112.875,
'qty' => 60
];

3_2 => [
    'cost' => 31.5,
    'qty' => 10
];

W rezultacie chciałbym mieć to na końcu.

Będzie to wykorzystane do obliczenia Cump mojego produktów.

Dziękuję za pomoc.

php
-2
CHRISCOM 21 listopad 2020, 21:10

1 odpowiedź

Najlepsza odpowiedź

Spróbuj tego. Zobacz komentarze do wyjaśnienia. Wyjścia:

array(2) {
  ["3_1"]=>
  array(2) {
    ["qty"]=>
    int(60)
    ["cost"]=>
    float(112.875)
  }
  ["3_2"]=>
  array(2) {
    ["qty"]=>
    int(10)
    ["cost"]=>
    float(31.5)
  }
}

Kod:

<?php

// Your example cart items.
$cartItems = [
    [
        'qty' => 10,
        'cost' => 21.5,
        'id_article' => '3',
        'declinaison' => '1'
    ],
    [
        'qty' => 10,
        'cost' => 31.5,
        'id_article' => '3',
        'declinaison' => '2'
    ],
    [
        'qty' => 50,
        'cost' => 91.375,
        'id_article' => '3',
        'declinaison' => '1'
    ]
];

// Result array.
$groupedCartItems = [];

// Loop over every cart item and group them on the 'id_article_declinaison' key.
foreach ($cartItems as $cartItem)
{
    $key = "{$cartItem['id_article']}_{$cartItem['declinaison']}";
    
    if (!isset($groupedCartItems[$key]))
    {
        // Not yet recorded this item before, initialize it here.
        $groupedCartItems[$key]['qty'] = $cartItem['qty'];
        $groupedCartItems[$key]['cost'] = $cartItem['cost'];
    }
    else
    {
        // Already saw this item, add the qty and cost to its subtotal.
        $groupedCartItems[$key]['qty'] += $cartItem['qty'];
        $groupedCartItems[$key]['cost'] += $cartItem['cost'];
    }
}

var_dump($groupedCartItems);
/*
array(2) {
  ["3_1"]=>
  array(2) {
    ["qty"]=>
    int(60)
    ["cost"]=>
    float(112.875)
  }
  ["3_2"]=>
  array(2) {
    ["qty"]=>
    int(10)
    ["cost"]=>
    float(31.5)
  }
}
*/
0
Ro Achterberg 21 listopad 2020, 18:31