php - 如何用join计算mysql?
问题描述
我正在使用 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
}
解决方案
Use a 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')
]);
推荐阅读
- java - 理解方法引用工作的问题
- makefile - 如何逐步调试 GNU make?
- parse-platform - 以编程方式为用户创建新的 Parse.Session,无需密码
- git - TeamCity:配置 VCS 根目录时无法选择我上传的 SSH 密钥
- r - 如何更改为 kable() 打印的因子级别的顺序?
- python - 如何用乌龟让物体反弹回来
- extract - UnpackArchive::onRunAsUser 第 2714 行,无法在 Plesk 上解压存档
- unity3d - 在 Unity 中销毁游戏对象
- python - 向 ADT 添加新方法
- javascript - XMLHttpRequest 发送 (POST) 带有“+”的参数