簡體   English   中英

如何將一個表中的自動遞增的ID鏈接到另一表中的ID?

[英]How do I link the auto-incremented id from one table to the id in another table?

我目前正在為我的網站開發我的私人消息傳遞系統,到目前為止,我所要做的一些事情還是很有意義的。

我認為我必須使用mysql join的功能,但是有一些問題。在我的模型中,我已經開始為消息收件箱進行編碼,並具有以下查詢:

“ SELECT * FROM消息在哪里from_id ='$ id'”;

$ id基本上是我的用戶表中的自動遞增的id,from_id是同一件事,但在我的message表中。

我想知道的是消息表應該如何獲取from_id? 我知道消息表中的from_id和用戶表中的自動遞增的id是我將用來鏈接這兩個表的..但是我對此有些困惑。

我寧願使用id來標識消息的發送者和接收者,而不是使用它們的用戶名,但是我很困惑如何進行設置。 我很確定一旦了解就可以做到。

用戶登錄時,不能使用會話來保存用戶ID嗎? 這樣,您可以在需要時獲取用戶ID。

// ...

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

當然,我們這里沒有討論安全性,因此代碼顯然是不安全的。 但是,我們將其留給其他討論。 我向正確的方向踢了你嗎? :p

我不確定我是否完全了解您。 您正在加載消息,在message表中有一列用於用戶ID的列,但是您還想通過一個查詢來加載用戶名嗎? 如果是這樣的話,會這樣做

選擇{無論您想擁有什么} FROM用戶u,消息m WHERE u.id = m.from_id

與在SELECT子句中相比,您可以使用u.username檢索用戶詳細信息,前提是您在users表中有一個username列。

根據您使用的身份驗證庫,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();
}

它不僅具有對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作業以刪除孤立的郵件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM