[英]MYSQL+PHP How to update auto-incremented id when delete row in table?
[英]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.