[英]Laravel get latest records with group by with multiple column
您好,我是Laravel的新手,我被Laravel雄辯地困在一個復雜的查詢中
這是我的消息表結構
---|-----------|-------------|--------
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
我想從消息表中檢索最近的聊天,無論是用戶還是發件人或接收者,我都想使用groupBy使用多列檢索,並且只顯示最近一條消息
類似於用戶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]照亮/數據庫/ QueryException:
語法錯誤或訪問沖突:1055 ORDER BY子句的表達式#1不在GROUP BY子句中,並且包含未聚合的列
我不想在config/database.php
更新mysql_strict
模式
它無法正常工作,任何人都可以幫助我或任何好的建議或想法
任何幫助將不勝感激
您能弄清楚如何在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 |
---
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.