I have some data in the database that records the stocks of items and I want to group that data based on month-year for every item.
It looks like this for items :
item_id | item |
1 | item_1 |
2 | item_2 |
3 | item_3 |
4 | item_4 |
And for stocks :
stock_id | item_id | date | amount
1 | 1 | 2022-03-01 | 100
2 | 2 | 2022-03-01 | 120
3 | 3 | 2022-03-01 | 100
4 | 4 | 2022-03-01 | 400
5 | 1 | 2022-04-01 | 100
6 | 2 | 2022-04-01 | 120
7 | 3 | 2022-04-01 | 100
8 | 4 | 2022-04-01 | 400
...
What I need to achieve is something like this :
$data = [
[
'y' => '03',
'1' => 100,
'2' => 120,
'3' => 100,
'4' => 400
],
[
'y' => '04',
'1' => 100,
'2' => 120,
'3' => 100,
'4' => 400
],
];
...
A simple query that I've tried so far :
SELECT MONTH(date) as Month, SUM(amount) as Amount, item
FROM stocks as s
LEFT JOIN items as i
ON s.item_id = i.item_id
GROUP BY s.id_item, MONTH(date)
ORDER BY MONTH(date) ASC
How to grouping that data by month and sum the amount of every item in every month?
UPDATED PHP SNIPPET
$StockData = [];
foreach ( $StockModel->stockMonthly()->getResult() as $stock )
{
$StockData[] = [
'y' => $stock->Month
];
for ( $i = 0; $i < count($StockData); $i++ )
{
if ( $StockData[$i]['y'] === $stock->Month)
{
array_push($StockData[$i], [$stock->item => $stock->Amount]);
}
}
}
I don't know how to grouping the data into the same month