php - 用于创建消息列表的 Sql 查询
问题描述
我正在使用 Laravel 创建消息服务。
以下是我的表格
我尝试了以下代码
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";
推荐阅读
- c# - 用单行语法实例化一个对象并调用返回 C# 或 C++ 中的值的方法?
- java - 如何使状态栏完全变白?
- php - 如何将 WEI 转换为 ETHER php
- c++ - 在矩阵模板类中重载运算符 *= 和 Operator+
- java - 键入字符时 onKeyReleased 不起作用
- c++ - Assimp - 如何使用任何文件格式导入带有纹理的网格?
- apache-ranger - Ranger 增量 AD 同步是否每次都会覆盖或保留以前同步的用户(例如,如果过滤器更改)?Unix用户重新创建?
- bash - 如何使用 bash 将包含“姓氏,名字”的 csv 列分成两个不同的 csv 列?
- java - 开始活动(意图);似乎总是使应用程序崩溃
- javascript - 在 react-table 中,我结合了基本的排序和调整大小的示例,但想在调整列大小时抑制排序