php - 在 Laravel 中使用 groupby 选择最近的记录
问题描述
我有两个类似如下的表条目:
gym_clients
+---------+---------+-----------------+
| id | first_name| last_name |
+---------+-----------+---------------+
| 1 | Name 1 | Last 1 |
| 2 | Name 2 | Last 2 |
+---------+-----------+---------------+
gym_client_purchases
+---------+---------+-----------------+
| id | client_id | purchase_date |
+---------+-----------+---------------+
| 15 | 1 | 2018-04-01 |
| 16 | 1 | 2018-05-01 |
| 17 | 2 | 2018-05-01 |
+---------+-----------+---------------+
我想按每个客户的购买进行分组并显示最新的。
我尝试了这个查询,但 groupby 向我显示了最旧的购买(id 15)。
有任何想法吗?
$this->data['latestSubscriptions'] = GymPurchase::select('first_name', 'last_name', 'gym_client_purchases.*')
->leftJoin('gym_clients', 'gym_clients.id', '=', 'client_id')
->groupBy('gym_client_purchases.client_id')
->orderBy('gym_client_purchases.purchase_date', 'desc')
->get();
提前致谢。
解决方案
首先,当您使用 group by 时,您必须在此子句中指定查询要分组的列,因此我建议您尝试在 sql 引擎上查询。
你会有这样的东西
select first_name, last_name, A.*
from gym_client_purchases A
left Join gym_clients B on B.id = A.client_id
group by A.client_id
order By A.purchase_date desc
你会注意到它不起作用
也许你想要的是这样的
select A.client_id, B.first_name, B.last_name, max(A.purchase_date)
from gym_client_purchases A
left Join gym_clients B on B.id = A.client_id
group by A.client_id, B.first_name, B.last_name
order By max(A.purchase_date) desc
推荐阅读
- r - 随机或按比例将分类值分配给 NA
- php - 使用html表单在php循环中提交多个sql查询
- php - 无法将表信息保存到 MySQL
- .htaccess - .htaccess RewriteEngine 规则分离
- javascript - 带有 openlayer 示例的 Geolocation Javascript 代码
- twitter-bootstrap - 网页没有响应
- laravel - Laravel 5.5 whereDate/whereTime 不加引号
- email - 查询 reg SMTP 端口
- azure-devops - Azure webapp 及其 webjobs 部署
- php - 将变体库存数量和状态添加到 Woocommerce 产品变体下拉列表