【问题标题】:How do I link the auto-incremented id from one table to the id in another table?如何将自动递增的 id 从一个表链接到另一个表中的 id?
【发布时间】:2011-06-07 20:16:27
【问题描述】:

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

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

"SELECT * FROM messages WHERE from_id = '$id'";

$id 基本上是我的 users 表中的自动递增 id,而 from_id 是相同的,但在我的 messages 表中。

我想知道消息表是如何获取from_id的?我知道消息表中的 from_id 和用户表中的自动递增 id 是我将用来链接这两个表的。但我有点不知道该怎么做。

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

【问题讨论】:

标签: php mysql codeigniter auto-increment


【解决方案1】:

根据您使用的身份验证库,您将在 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();
}

【讨论】:

    【解决方案2】:

    我不太确定我是否完全理解你。 您正在加载消息,在消息表中,您有一个用户 ID 列,但您还想通过单个查询加载用户名? 如果是这样的话,那么这样的事情就可以了

    SELECT {whatever you want to have} FROM users u, 消息 m WHERE u.id=m.from_id

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

    【讨论】:

      【解决方案3】:

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

      // ... $fromID = $_SESSION['uid']; 插入`message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')

      当然,我们这里没有讨论安全性,所以代码显然不安全。但我们将把它留给另一个讨论。我踢你的方向是对的吗? :p

      【讨论】:

      • 我想这样做,但我的 from_id 如何获得值?它从何而来?用户登录时从会话中获取用户 ID 没有问题。
      • 好吧,当然是插入数据库。我刚刚更新了我的答案。我认为是这样的。
      【解决方案4】:

      除了对 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 作业以删除孤立的邮件)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        相关资源
        最近更新 更多