[英]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 小提琴
解決方案。
最后,我通過查看這些鏈接找到了解決方案,我想通過提供指向他們答案的鏈接來感謝這些人。
這是最終代碼
$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();
這是最終結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.