-3

这是我的表 [1] 的结构:https ://i.stack.imgur.com/lmgtJ.png

用户表

ID 姓名
1 投标

消息表

ID 用户身份 to_user 内容
1 2 1 信息 0

我想为像User1 向您发送消息 (24)这样的用户显示通知,这里 24 是 user1 的未读消息总数。

问题:通知必须按此顺序显示。最近发送消息的用户将首先显示。这正是我必须面对的问题。

输出示例:像 android 应用程序WhatsApp在聊天区域显示一条消息。

注意:消息表中还添加了读取列类型布尔值。

注意:在此应用程序中,只有用户和管理员可以互相聊天。

寻找能给我结果的优雅的 Laravel 8 查询。

4

2 回答 2

1

解决方案。

最后,我通过查看这些链接找到了解决方案,我想通过提供指向他们答案的链接来感谢这些人。

  1. 在 Laravel 中进行复杂查询的 orderBy 之后的 GroupBy

  2. 使用 Eloquent (Laravel) 在 Group By 之前排序

  3. 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();

这是最终结果

最终输出

于 2021-01-05T14:33:58.160 回答
0
$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 小提琴

于 2021-01-05T05:01:39.617 回答