Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL中的Messages表,获取每个线程的最后一条消息_Php_Mysql_Laravel - Fatal编程技术网

Php MySQL中的Messages表,获取每个线程的最后一条消息

Php MySQL中的Messages表,获取每个线程的最后一条消息,php,mysql,laravel,Php,Mysql,Laravel,我试图从每次对话中获取最后一条消息,唯一的问题是我没有使用对话表 我使用的是一个messages表,我的表列如下所示: id from_id to_id text isread isseen created_at updated_at $messages = Message::select('*')-> from(DB::raw("(select * from `messages` where `to_id` = ".Auth:

我试图从每次对话中获取最后一条消息,唯一的问题是我没有使用对话表

我使用的是一个messages表,我的表列如下所示:

id  from_id     to_id   text    isread  isseen  created_at  updated_at 
$messages = Message::select('*')->
                from(DB::raw("(select * from `messages` where `to_id` = ".Auth::id()." order by `created_at` desc) as sub"))->
                groupBy('from_id')->orderBy('created_at', 'desc')->
                paginate(7);
SELECT from_id, MAX(created_at) AS last FROM messages GROUP BY from_id
现在,我可以检索如下对话:

id  from_id     to_id   text    isread  isseen  created_at  updated_at 
$messages = Message::select('*')->
                from(DB::raw("(select * from `messages` where `to_id` = ".Auth::id()." order by `created_at` desc) as sub"))->
                groupBy('from_id')->orderBy('created_at', 'desc')->
                paginate(7);
SELECT from_id, MAX(created_at) AS last FROM messages GROUP BY from_id
唯一的缺点是,我没有检索每次对话的最后一条消息,而是检索收到的最后一条消息

如何检索每次对话的最后一条消息

示例检索user63对话和每个对话的最后一条消息:

id  from_id     to_id   text    isread  isseen  created_at  updated_at 
23  224         63      a        0         0    2015-03-28 22:23:54     2015-03-28 22:23:54
20  63          225     b        0        0     2015-03-28 22:23:06     2015-03-28 22:23:06
16  225         63      hi       0        1     2015-03-28 22:21:32     2015-03-28 22:21:32
我想到了一个主意,但不确定:

$messages = Message::select('*')->
            from(DB::raw("
(
(select *, to_id as theuser from `messages` where `to_id` = ".Auth::id()." order by `created_at` desc)
union
(select *, from_id as theuser from `messages` where `from_id` = ".Auth::id()." order by `created_at` desc) group by theuser
) as sub"))->
            groupBy('from_id')->orderBy('created_at', 'desc')->
            paginate(7);

我自己找到了解决办法,谢谢大家!:)

这也必须起作用: 这种方法的不同之处在于,在max()函数的帮助下实现了自连接,如下所示:

id  from_id     to_id   text    isread  isseen  created_at  updated_at 
$messages = Message::select('*')->
                from(DB::raw("(select * from `messages` where `to_id` = ".Auth::id()." order by `created_at` desc) as sub"))->
                groupBy('from_id')->orderBy('created_at', 'desc')->
                paginate(7);
SELECT from_id, MAX(created_at) AS last FROM messages GROUP BY from_id
因此:


from\u id
添加一个约束?您的意思是指向何处的\u id或来自何处的\u id?我将获得重复的线程。其中
来自\u id
这是基于对话的假设,你指的是两个人之间的信息。是的,这只是两个人,但是,我又将如何拥有独特的线程……考虑这个例子:从Fuffid ID 50到ID 60,从Fuffid ID 60到50 ID,如果你不知道大约60,你将如何得到最后一条消息,你得到了50的THE。如果这是一个会话线程,你必须了解双方……除非我漏掉了别的东西。这个代码是完全不可读的,我建议你多注意编码风格,谢谢,我编辑了代码,请考虑投票: