mysql - 在 laravel 的查询中查询相关记录并从中进行一些计算
问题描述
我在我的开发中使用 laravel,我有一个看起来像这样的数据库。
卖家表:
ID | 姓名 | 位置 |
---|---|---|
1 | 约翰 | 导师 |
2 | 迈克尔 | 导师 |
3 | 已经 | 区域经理 |
4 | 门兹 | 经理 |
5 | 君 | 文员 |
卖家销售表:
ID | 卖家ID | 月 | 销售量 |
---|---|---|---|
1 | 1 | 一月 | 5000 |
2 | 1 | 二月 | 10000 |
3 | 2 | 一月 | 1000 |
4 | 2 | 二月 | 1000 |
5 | 3 | 二月 | 1000 |
在我的代码中,我想要完成的是按位置对卖家表进行分组。另外,我还需要统计有多少卖家从之前的销售中达到了 1000。在此示例中,示例输出如下所示。
结果:
位置 | 总数 | 已从上一次销售达到 1000 次销售 | 与之前的销售相比,尚未达到 1000 次销售 |
---|---|---|---|
导师 | 2 | 1 | 1 |
区域经理 | 1 | 0 | 1 |
经理 | 1 | 0 | 1 |
文员 | 1 | 0 | 1 |
我的问题是,是否可以单独使用查询来实现这一点?或者我真的需要为此添加额外的逻辑?目前,数据库已经使用一对多关系连接。我的示例查询如下所示
$seller = Seller::with(['sales' => function ($query)use ($dateForCondition){
$query->orderBy('date', 'desc')
->where('date', '<=', $dateForCondition)
->limit(2);
}])
如果可以单独使用查询,你能给我一些想法吗?如果单独使用查询是不可能的,我需要手动循环所有记录并添加一些条件和变量来按位置分组,我有数千条记录,我担心在这个过程中我可能会遇到一些限制。请帮忙谢谢。
解决方案
似乎您几乎拥有在刀片中完成工作所需的所有数据,
$salesPeopleGrouped = Seller::with(['sales' => function ($query) use ($dateForCondition) {
$query->orderBy('date', 'desc')
->where('date', '<=', $dateForCondition)
->limit(2); // Not sure why you are setting a limmit.
}])->groupBy('position');
<table class="s-table">
<thead>
<tr>
<th style="text-align: left;">position</th>
<th style="text-align: center;">total count</th>
<th style="text-align: right;">has Reach 1000 sales from previous sale</th>
<th style="text-align: right;">has not Reach 1000 sales from previous sale</th>
</tr>
</thead>
<tbody>
@foreach($salesPeopleGrouped as $position => $salesPeople)
@php
$over = $salesPeople->countBy(function ($person) {
return $person->sales >= 1000;
});
@endphp
<tr>
<td style="text-align: left;">{{ $position }}</td>
<td style="text-align: center;">{{ $salesPeople->count() }}</td>
<td style="text-align: right;">{{ $over }}</td>
<td style="text-align: right;">{{ $salesPeople->count() - $over }}</td>
</tr>
@endforeach
</tbody>
</table>
推荐阅读
- c++ - C++ 中的头文件如何实现更快的编译?
- javascript - 无法在 setTimeout 处将属性“src”设置为 null
- javascript - Vuex 在提交时更新视图
- c# - 在“来源”参数中多次指定了 X 项
- javascript - 带有多个倒数计时器的网页
- twilio - Twilio,聊天客户端初始化失败:对 EMS 服务的请求失败,无法设置 FPA 令牌}
- google-chrome - 检查远程设备上的边缘导致 404 未找到
- ssl - 带有自签名证书的 SSL IOWebSocketChannel 使用颤振
- javascript - jQuery 在方法之前绝对需要 hide() 吗?
- python - 如何弥补丢失的引用来声明一个字段(numpy)?