簡體   English   中英

Laravel 計數、groupBy 和 orderBy 無法正常工作

[英]Laravel count, groupBy and orderBy not working properly

這是我的表[1]的結構: https://i.stack.imgur.com/lmgtJ.png

用戶表

ID 姓名
1 投標

消息表

ID 用戶身份 to_user 內容
1 2 1 信息 0

我想為像User1 向您發送消息 (24)這樣的用戶顯示通知,這里 24 是 user1 的未讀消息總數。

問題:通知必須按此順序顯示。 最近發送消息的用戶將首先顯示。 這正是我必須面對的問題。

Output 示例:像 android 應用程序WhatsApp在聊天區域顯示一條消息。

注意:閱讀列類型 Boolean 也添加到消息表中。

注意:在此應用程序中,只有用戶和管理員可以互相聊天。

尋找優雅的 Laravel 8 查詢給我結果。

$message = DB::table('message')->select('message.user_id');

/* join */
$message = $message->join('user', 'message.to_user', '=', 'user.id');    

/* select statements */
$message = $message->addSelect('message.to_user');
$message = $message->addSelect(DB::raw('COUNT(*) AS total_messages'));

$message = $message->groupBy('message.user_id', 'message.to_user');
$message = $message->get();

這應該計算用戶發送給另一個用戶的消息數量。

演示: SQL 小提琴

解決方案。

最后,我通過查看這些鏈接找到了解決方案,我想通過提供指向他們答案的鏈接來感謝這些人。

  1. GroupBy 后 orderBy 用於 Laravel 中的復雜查詢

  2. 使用 Eloquent (Laravel) 在分組前排序

  3. SQL select 僅在列上具有最大值的行

這是最終代碼

$result= Message::with('users')
         ->select(DB::raw('id,from_user,to_user,created_at, max(created_at) as createdAt'))
         ->where('to_user',$user)
         ->orderBy('createdAt', 'desc')
         ->groupBy('from_user')
         ->selectRaw('count(messages.from_user) as total_msg')
         ->get();

這是最終結果

最終 Output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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