Laravel 查詢:orderBy 不與 groupBy 一起使用(使用連接表)
P粉316890884
P粉316890884 2024-03-28 16:08:45
0
1
326

我正在Laravel 中開發基本訊息功能,並希望顯示向當前登入用戶發送訊息的每個用戶以及最後收到的訊息,問題是「orderByDesc」無法正常工作它顯示第一則訊息而不是最後一條。

這是我寫的查詢:

$receivedmessages = DB::table('messages')
    ->join('users', 'users.id', '=', 'messages.sender_id')
    ->select('messages.*', 'users.username')
    ->where('receiver_id', Auth::user()->id)
    ->orderByDesc('messages.created_at')
    ->groupBy('receiver_id')
    ->get();

知道如何解決這個問題嗎? 謝謝

P粉316890884
P粉316890884

全部回覆(1)
P粉546138344

刪除->where('receiver_id', Auth::user()->id) 此條件以取得每個使用者的結果,而不是您登入時所使用的結果

實現上述目標的技巧是從表格中取得最大 Id 並在 WHERE IN 條件中使用這些 Id

$receivedmessages = DB::table('messages')
    ->join('users', 'users.id', '=', 'messages.sender_id')
    ->select('messages.*', 'users.username')
    ->whereRaw('messages.id IN (SELECT MAX(messages.id) FROM messages GROUP BY receiver_id, sender_id)')
    ->where('receiver_id', Auth::user()->id)
    ->orderByDesc('messages.created_at')
    ->get();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板