【发布时间】:2015-03-28 19:06:45
【问题描述】:
我正在尝试从每个对话中获取最后一条消息,唯一的问题是我没有使用对话表。
我正在使用一个消息表,我的表列如下所示:
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);
唯一的缺点是我不是检索每个对话的最后一条消息,而是检索收到的最后一条消息。
如何检索每个对话的最后一条消息?
示例检索 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);
【问题讨论】:
-
使用
from_id添加约束? -
你的意思是哪里 to_id 或哪里 from_id?我会收到重复的线程。
-
from_id的位置(这是基于通过对话假设您是指两个人之间的消息。 -
是的,这只是两个人,但是,我将如何拥有独特的线程......例如考虑这个:from_id 50 到 id 60,和 from_id 60 to_id 50 你将如何获得最后一条消息对于该线程,假设您不知道 60 个,那么您将获得 50 个线程。
-
如果它是一个对话线程,你必须了解双方......除非我错过了其他东西。