php - Laravel 通过多列分组获取最新记录
问题描述
你好,我是 Laravel 的新手,我被 Laravel eloquent 困在一个复杂的查询中
这是我的消息表结构
---|-----------|-------------|--------
ID | sender_id | receiver_id | message
---|-----------|-------------|--------
1 | 1 | 2 | Hello
2 | 1 | 2 | Hey hello reply
3 | 2 | 1 | Good
4 | 3 | 2 | Hey GOOD Morning
5 | 3 | 2 | good night
我想从消息表中检索最近的聊天,无论用户是发送者还是接收者我想用一个组检索通过使用多个列和最新的只有一条消息
喜欢用户 2(发送者或接收者)
-----------|-------------|---------------
sender_id | receiver_id | message
-----------|-------------|---------------
2 | 1 | Good
3 | 2 | good night
这是我雄辩的查询
$user = auth()->user(); //User_id 2 based on logged in user either sender or reciever
Message::where('user_id', $user->id)
->orWhere('receiver_id', $user->id)
->select('user_id','receiver_id')
->groupBy('user_id','receiver_id')
->get();
结果
all: [
App\Models\Message {
user_id: 1,
receiver_id: 2,
}, // don't want this record
App\Models\Message {
user_id: 2,
receiver_id: 1,
},
App\Models\Message {
user_id: 3,
receiver_id: 2,
},
],
如果我尝试使用 latest() 方法,那么它会显示错误时间戳在表中
使用消息'SQLSTATE [42000] 照亮/数据库/查询异常:
语法错误或访问冲突:1055 ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中并且包含非聚合列
我不想更新mysql_strict
模式config/database.php
它不能正常工作任何人都可以帮助我或任何好的建议或想法
任何帮助将不胜感激
解决方案
你能弄清楚如何在 Laravel 中表达这一点吗?
**Schema (MySQL v5.7)**
CREATE TABLE my_table
(ID SERIAL PRIMARY KEY
,sender_id INT NOT NULL
,receiver_id INT NOT NULL
,message VARCHAR(50) NOT NULL
);
INSERT INTO my_table VALUES
(1,1,2,'Hello'),
(2,1,2,'Hey hello reply'),
(3,2,1,'Good'),
(4,3,2,'Hey GOOD Morning'),
(5,3,2,'good night');
---
**Query #1**
SELECT a.*
FROM my_table a
JOIN
( SELECT MAX(id) id
FROM my_table
WHERE 2 IN(sender_id,receiver_id)
GROUP
BY LEAST(sender_id,receiver_id)
, GREATEST(sender_id,receiver_id)
) b
ON b.id = a.id;
| ID | sender_id | receiver_id | message |
| --- | --------- | ----------- | ---------- |
| 3 | 2 | 1 | Good |
| 5 | 3 | 2 | good night |
---
推荐阅读
- python - 从python中的父类实例化
- android - 如何使用 AppBarConfiguration 设置 NavigationView?
- sql - 如何根据另一个表值编写查询
- amazon-web-services - 将 npm db-migrate 与 Elastic Beanstalk 一起使用
- java - Hibernate - 重写旧版 createCriteria
- html - 鼠标悬停后隐藏嵌入的 youtube 视频控件
- reactjs - React Native Reanimated:如何将视图每帧移动 5 个像素?
- gitlab-ci - 在 GUI 上查看时,如何折叠部分 GitLab CI 作业日志?
- javascript - 使用 javascript 创建平滑的无限多项目轮播滑块
- windows - HAXM 未安装(Windows 10 家庭用户,Hyper-V 尚未安装)