Laravel 计数、groupBy 和 orderBy 无法正常工作

问题描述

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

用户

id 姓名
1 遵守

消息表

id user_id to_user content 阅读
1 2 1 消息 0

我想为诸如用户 1 向您发送消息 (24)用户显示通知,此处 24 是用户 1 的未读消息总数。

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

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

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

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

寻找能够给我结果的优雅的 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 Fiddle

,

解决方案。

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

  1. GroupBy after orderBy for complicated query in Laravel

  2. Order By before Group By using Eloquent (Laravel)

  3. SQL select only rows with max value on a column

这是最终代码

$

这是最终结果

Final Output

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...