簡體   English   中英

Laravel通過多列分組獲得最新記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM