MySQL查询和连接表

时间:2014-07-01 17:33:11

标签: mysql

我正在使用mysql和php工作,我试图为学习目的取得一些成果。

所以我尝试的是制作会话消息系统,我有以下内容:

我有2个表,第一个会话和第二个conversation_messages

第一个表格会话如下所示:

c_id,user_one,user_two

第二个表 conversation_messages 如下所示:

m_id,text,date,created_by,status,c_id

所以在消息表中我设置了对话ID,当用户点击对话打开它时,url会更改为messages.php?c_id = 1或类似的东西......那很好,因为我从c_id获取c_id网址等等。

我的问题如下:

假设我不想获取所有会话消息c_id = 1.如何查询表格并获取该会话ID的所有消息。此外,我需要查询,只有当记录的用户参与对话时才会返回结果...所以登录的用户只有在他/是用户A(user_one)或用户B(user_two)时才能看到对话消息。我该怎么做,我需要加入表格。那么最好的方法是什么。

因此,当用户手动登录到url messages.php?c_id = 3时,如果他没有参与该对话,我就不希望他看到它。

抱歉,我是新来的,并且不知道如何正确格式化代码或其他任何内容。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要从会话中获取已记录的用户ID并将其放入查询中

SELECT * FROM conversation_message, conversation 
WHERE conversation.c_id = $ID_OF_CONVERSATION 
AND (user_one = $ID_LOGGED_USER OR user_two = $ID_LOGGED_USER) 
AND conversation_message.c_id =  conversation.c_id

答案 1 :(得分:0)

从广义上看,如果要为某个端点添加安全性,则需要在验证用户输入后允许或拒绝访问。在您给出的示例中,您的用户输入是c_id值3.在一个简单的PHP示例中,您可以执行以下操作:

$user_id = $_SESSION['user_id'];
$can_access = false;
$convo_id = $_GET['c_id'];
$safe_id = mysql_real_escape_string( $convo_id );
$rli = mysql_query( "SELECT * FROM conversation WHERE c_id = {$safe_id}" );

if( mysql_num_rows( $rli ) ) {
  $convo = mysql_fetch_object( $rli );
   $can_access = $convo->user_one == $user_id || $convo->user_two == $user_id;
}

请注意,在此示例中,我从会话中提取了“登录”用户的ID,该会话假定您正在使用会话。创建“登录”用户视图有许多不同的方法,这有点超出了本答案的范围。这里的最终结果是一个布尔值变量$ can_access,它指示用户是否可以访问该页面。假设他们可以访问该页面,您可以从现在验证的对话中提取所有消息,如下所示:

$rli = mysql_query("SELECT * FROM conversation_messages WHERE c_id = {$safe_id}");
$messages = array();
while( $message = mysql_fetch_object( $rli ) ) {
  $messages[ $message->m_id ] = $message;
}

上面给出了一个PHP数组,其中包含与对话关联的所有消息。希望这足以让你开始。