Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
消息传递系统-MySql/PHP/Kohana_Php_Mysql_Kohana - Fatal编程技术网

消息传递系统-MySql/PHP/Kohana

消息传递系统-MySql/PHP/Kohana,php,mysql,kohana,Php,Mysql,Kohana,我正在开发一个在数据库中使用以下结构的消息传递系统 问题是如何按用户选择PHP分组中的所有消息 例: -从用户A到用户X的所有消息 -从用户B到用户X的所有消息 -从用户C到用户X的所有消息 (user X=user logged)您可以通过以下MySQL查询轻松获取所有消息: SELECT messages.* FROM users JOIN users_has_messages ON users.id = users_has_messages.users_id JOIN messages

我正在开发一个在数据库中使用以下结构的消息传递系统

问题是如何按用户选择PHP分组中的所有消息

例:

-从用户A到用户X的所有消息

-从用户B到用户X的所有消息

-从用户C到用户X的所有消息


(user X=user logged)

您可以通过以下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替换为您希望从中获取消息的用户的ID即可

此查询的工作方式是在特定条件下将表“连接”在一起。首先,当
users.id=users\u有消息时,我们将
users
表加入
users\u has\u messages
表,然后我们对
messages
表进行类似的“加入”

最后,使用
WHERE
语句定义条件。在这种情况下,我们只需要具有特定id的用户

在查看上次编辑后,您似乎也希望从特定用户处获取所有消息。不幸的是,您的模式没有发送消息的人的信息。如果需要,您必须将
send\u user\u 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__

如果所有必需的信息都在表中,那么下面是一个使用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/>';
}
$user_id='1';//无论您如何获得当前用户
$messages=DB::select('*')->from('messages'))
->join('users_has_messages','LEFT')->on('messages_id','=','id'))
->其中('users\u id','=',$user\u id)
->订购人('from\u id ASC')
->执行()->as_array();
foreach($msg形式的消息)
{
echo$msg->id.:'.$msg->subject.“
”; }
我想你的意思是按用户“排序”而不是“分组”,对吗?在
users\u has\u messages
表中
userid
是什么意思?您如何知道每条消息的“发件人”和“收件人”?是否有更多的表或字段?它是分组的。已登录的用户已看到他进行的所有对话。FaceBooks消息中的equal模式中的某些内容是错误的。您如何知道消息的“发件人”或“收件人”?该表(users\u has\u messages)包含所有进行对话的用户。表(messages)有一个字段(from_id)。好的,列出了我的所有消息,我是使用Kohana ORM到达这里的。非常感谢。困难的是仅显示每个对话的最后一条消息,并按用户分组。与左侧的facebook聊天一样,我与此人的最后一次对话出现。要仅显示最后一条消息,您可以将
order\u by()
limit(1)
组合。这适用于数据库查询构建器对象,也可能适用于ORM