繁体   English   中英

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

[英]Sql query for creating message list

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

我想显示所有基于时间的最新消息。 这就是我要实现的 我正在尝试实施

以下是我的桌子

  • 信息表
    信息表
  • message_user表
    message_user大包

我尝试了以下代码

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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM