我正在开发一个使用数据库中以下结构的消息传递系统。消息系统 - MySql/PHP/Kohana
的问题是如何通过用户选择PHP分组的所有消息。
EX:
从用户A - 所有消息至用户X
- 所有从用户B到用户X
从用户C到用户X
- 所有消息的消息(用户X =用户登录)
我正在开发一个使用数据库中以下结构的消息传递系统。消息系统 - MySql/PHP/Kohana
的问题是如何通过用户选择PHP分组的所有消息。
EX:
从用户A - 所有消息至用户X
- 所有从用户B到用户X
从用户C到用户X
- 所有消息的消息(用户X =用户登录)
,这里是使用kohana3的数据库模块的部分解决方案。如果以下内容不适合您的模式,您将很容易适应它。
$user_id = '1'; // whatever how you get the current user
$messages = DB::select('*')->from('messages')
->join('users_has_messages', 'LEFT')->on('messages_id', '=', 'id')
->where('users_id', '=', $user_id)
->order_by('from_id ASC')
->execute()->as_array();
foreach($messages as $msg)
{
echo $msg->id.':'.$msg->subject.'<br/>';
}
好的,列出了我所有的消息,我是使用Kohana ORM来到这里的。谢谢! 难以仅显示每个对话的最后一条消息,按用户分组。就像在左侧的脸书聊天中,我与该人的最后一次对话出现。 –
只显示最后一条消息,您可以将'order_by()'与'limit(1)'结合使用。这适用于Database_Query_Builder对象,也可能适用于ORM – Asenar
你可以很容易地抓住所有消息,像这样的MySQL查询:
SELECT messages.* FROM users
JOIN users_has_messages ON users.id = users_has_messages.users_id
JOIN messages ON users_has_messages.messages_id = messages.id
WHERE users.id = __THE ID OF THE USER__
只是你有兴趣从得到消息的用户的ID替换__THE ID OF THE USER__
。
此查询的工作方式是通过“关于”特定条件“加盟”的表一起。首先,我们将users
表加入users_has_messages
表,users.id = users_has_messages.users_id
然后我们对messages
表执行类似的“加入”。
最后使用WHERE
语句来定义的条件。在这种情况下,我们只需要具有特定ID的用户。
在看了您最后一次编辑之后,您似乎也希望获得来自的所有消息以及特定用户。不幸的是,你的模式没有谁发送消息的信息。如果你需要,你将不得不将send_user_id
添加到messages
表。然后,你可以这样做:如果所有需要的信息都在表
SELECT messages.* FROM users
JOIN users_has_messages ON users.id = users_has_messages.users_id
JOIN messages ON users_has_messages.messages_id = messages.id
WHERE users.id = __THE ID OF THE RECIEVER__
AND messages.send_user_id = __THE ID OF THE SENDER__
我认为你的意思是“排序”,而不是由用户“分组”,对吧? – Asenar
“users_has_messages”表中的user_id是什么意思?你如何知道每条消息的“from”和“to”?你有更多的桌子或更多的领域? –
它被分组。记录的用户已经看到他所有的对话。等于消息facebook –