Как посчитать mysql с помощью join? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую laravel для разработки панели мониторинга продаж, поэтому необходимо подсчитать количество продаж в день.У меня есть две таблицы, продукты и транзакции.В продуктах у меня есть все продукты, а в транзакциях у меня есть все транзакции продаж

с этим запросом. У меня есть номера группы продаж по номеру продукта.

$dash = Transactions::select(DB::raw('`product_name` AS ProductName, COUNT(`cod_sale`) as `TotalSale`'))
        ->where('status_sale', '=', 'Finished')
        ->where('date_finished', '>=', $data)
        ->groupBy('product_name')
        ->get();

Этот возврат запроса

[
  {
    "ProductName": "Product A",
    "TotalSale": 15
  },
  {
    "ProductName": "Product B",
    "TotalSale": 2
  },
  {
    "ProductName": "Product C",
    "TotalSale": 1
  },
  {
    "ProductName": "Product D",
    "TotalSale": 9
  }
]

Как вернуть продукты, которые не были проданы, чтобы показать ноль?помня, что в таблицах транзакции представлены только те товары, которые были проданы, а в таблице - все товары

Я хочу вернуться так:

[
  {
    "ProductName": "Product A",
    "TotalSale": 15
  },
  {
    "ProductName": "Product B",
    "TotalSale": 2
  },
  {
    "ProductName": "Product C",
    "TotalSale": 1
  },
  {
    "ProductName": "Product D",
    "TotalSale": 9
  },
  {
    "ProductName": "Product E",
    "TotalSale": 0
  },
  {
    "ProductName": "Product F",
    "TotalSale": 0
  }

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Используйте LEFT JOIN:

Product::leftJoin('transactions', function($join) use($date) {
        $join->on('products.id', '=', 'transactions.product_id')
            ->where('status_sale', 'Finished')
            ->where('date_finished', '>=', $date);
    })
    ->groupBy('products.id')
    ->get([
        'products.name as ProductName',
        DB::raw('count(transactions.id) TotalSale')
    ]);
0 голосов
/ 25 сентября 2018

К сожалению, я не мог сделать ни одного из советов, я закончил изучать другие вещи, это было полезно!Но я решил сделать так, чтобы система вставляла в таблицу транзакции для всех продуктов каждый день с числом продаж = 0, и я изменил функцию подсчета на SUM, чтобы она добавляла сумму продаж определенного продукта, а не больше количества строк встол.

0 голосов
/ 24 сентября 2018

использовать этот код может вам поможет

$dash = Transactions::select(DB::raw('`product_name` AS ProductName, COUNT(`cod_sale`) as `TotalSale`'))
    ->where('status_sale', '=', 'Finished')
    ->where('date_finished', '>=', $data)
    ->where(DB::raw('COUNT(`cod_sale`)' '>', 0)
    ->groupBy('product_name')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...