首頁  >  問答  >  主體

Laravel 查詢:orderBy 不與 groupBy 一起使用(使用連接表)

我正在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粉316890884P粉316890884204 天前289

全部回覆(1)我來回復

  • P粉546138344

    P粉5461383442024-03-29 10:58:36

    刪除->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();

    回覆
    0
  • 取消回覆