如何将一个表中自动递增的id链接到另一个表中的id?

时间:2011-01-12 13:28:00

标签: php mysql codeigniter auto-increment

我目前正在为我的网站开发我的私人消息系统,到目前为止我要做的一些事情是有意义的。

我认为我必须使用mysql join的强大功能,但有一些问题.. 在我的模型中,我已经开始为我的消息收件箱编码并具有以下查询:

“SELECT * FROM messages WHERE from_id ='$ id'”;

$ id基本上是来自我的users表的自动递增的id,from_id与我的消息表中的内容相同。

我想知道的是消息表假设如何获取from_id?我知道来自messages表的from_id和来自users表的自动递增的id是我将用来链接两个表的东西..但是我有点担心如何解决这个问题。

我宁愿使用id来识别消息的发送者和接收者而不是用户名,但我很困惑如何设置它。我很确定,一旦我了解它,我就可以做到。

4 个答案:

答案 0 :(得分:1)

用户登录时无法使用会话保存用户ID吗? 这样,您可以在需要时获得用户ID。

// ...

$fromID = $_SESSION['uid'];
INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')

当然,我们在这里没有谈论安全性,所以代码显然不安全。但是我们会把它留给另一个讨论。我是否朝正确的方向踢你? :P

答案 1 :(得分:1)

我不太确定我是否完全理解你。 您正在加载消息,在消息表中您有一个用户ID列,但是您想要使用单个查询加载用户名吗? 如果是这样的话会这样做

  

SELECT {您想要拥有的} FROM FROM用户   u,消息m WHERE u.id = m.from_id

,而不是SELECT SELECT中,您可以使用u.username检索用户详细信息,假设您的users表中有一个用户名列。

答案 2 :(得分:1)

取决于您使用的auth库,CI中需要这样的内容:

view_messages()
{
    //this check could be done in the constructor 
    if($this->auth->logged_in()==TRUE)
    {
        $userID=$this->auth->user_data('userID');
    }
    else
    {
        redirect('not_logged_in');
    }

    $this->load->model('message');
    $messages = $this->message->get_messages($userID);
    // do what you want with messages.
    //print_r($messages);
}

你的消息模型:

function get_messages($userID=null)
{
    $this->db->where('userID', $userID);
    $data = $this->db->get('tblMessages');
    return $data->result();
}

答案 3 :(得分:0)

除了了解一些关于MySQL连接的内容之外,还有更多内容。你可以下载很多系统来获得一个好主意,试试phpBB或其他一些论坛软件。

使用私人消息系统很容易制造垃圾,但好的很难。

请记住,如果您的邮件只有一个条目,例如另一个用户提供的示例:

INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')

这将需要显示在用户的收件箱中,以及来自用户的已发送框。如果to_user删除它,则from_user突然没有该消息的记录。

您需要创建一个连接表,以列出加入消息ID的用户(来往或来自)的所有附件。那么你也可以有多个用户!

消息应该始终存在,用户只是“垃圾”(在连接上将is_trach设置为1)。当用户从垃圾箱中删除时,他们只删除与邮件的连接,当最后一个用户删除了他们的连接时,你可以删除它(或者获取一个cron作业来删除孤立的邮件)。