php - 用于创建消息列表的 SQL 查询

标签 php mysql laravel

我正在使用 Laravel 创建消息服务。

我想显示所有基于时间的最近消息。这就是我要实现的 This is Im trying to implement

以下是我的表格

  • 消息表
    message table
  • message_user 表
    message_user tbale

我试过下面的代码

SELECT DISTINCT user_id,sender 
FROM ( 
    SELECT DISTINCT message_user.user_id, messages.sender, messages.created_at 
        FROM messages 
        JOIN message_user ON message_user.message_id=messages.id AND message_user.user_id=225
    UNION
    SELECT DISTINCT message_user.user_id, messages.sender, messages.created_at FROM messages 
        JOIN message_user ON message_user.message_id=messages.id AND messages.sender=225 AND message_user.user_id NOT IN (
            SELECT DISTINCT messages.sender 
                FROM messages 
                JOIN message_user ON message_user.message_id=messages.id AND message_user.user_id=225
            )
) mytable 
ORDER BY created_at

问题是输出不是预期的格式(即没有根据 created_at 排序)

以下是我试过对应的Laravel代码

$id        = $request->user()->id;
$user      = User::find($id);
$buddylist = $user->messages()->select(DB::raw('message_user.user_id,messages.sender,messages.created_at'));
$subquery  = Message::select(DB::raw(' messages.sender'))->join('message_user','messages.id','=','message_user.message_id') ->where("message_user.user_id",'=',$request->user()->id);
$mybuddy   = Message::selectRaw('message_user.user_id,messages.sender,messages.created_at')
          ->join('message_user','messages.id','=','message_user.message_id')
          ->where("messages.sender",'=',$request->user()->id)
          ->whereNotIn('message_user.user_id', $subquery)
          ->union( $buddylist)
          ->groupBy('sender')
          ->groupBy('user_id')
          ->orderBy('created_at','desc')
          ->get();

最佳答案

如果您有另一个名为“receiver_id”的列,您可以做的是:

$query="select * from messages WHERE sender_id='user_id' or receiver_id='user_id' ORDER BY created_at asc";

关于php - 用于创建消息列表的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53995311/

相关文章:

php - session id如何找到当前用户id

PHP如何连接套接字并读取响应?

php - 使用PHP的exec进行Ghostscript PDF文件压缩(Docker上的Laravel)

MySQL : INSERT INTO with foreach like

php mysql插入数据,但是是在while循环中

javascript - 我可以向 Google Charts Load 的回调函数传递参数吗?

Laravel WhereIn 或 Wherein with where

Laravel 的 whereBetween 不包括日期

php - 为什么 fopen 在响应为 HTTP 204(空内容)时发出警告?

javascript - 如何在 Node.js 查询中更改 mySQL 数据库中 NOW() 的时区?