2010-12-12 34 views
0

我不知道如果標題正是我試圖解釋,我的英語水平低。但是,我解釋一下:我有一個MySQL表來存儲評論我的消息表:MySQL和PHP的唯一ID的評論表,引用的東西

news_comments: 

id INT, AI 
id_new INT 
name VARCHAR 
comment TEXT 

但我要爲每一個新的每個評論的唯一編號。所以對於id_new = 1,我有#1,#2,#3 ...和id_new = 2另一個#1,#2,#3。

如果我從id_new = 1刪除評論#1,#2將保持#2,下一個評論(如果存在#2和#3)將是#4。如果#4被刪除,則新評論將是#5。

我該如何管理?

預先感謝您!

+0

**不,你不想要**。事實上,這根本不是數字。只留下它一個 – 2010-12-12 14:53:16

+0

我同意Col.Srapnel。你正在把「邏輯」放入你的主鍵中,這幾乎總是一個壞主意。你爲什麼認爲你需要這樣做? – 2010-12-12 14:56:26

+0

爲什麼你有id_new字段?它與另一張桌子有關嗎?你的id字段在這種情況下將是唯一的。 – Cudos 2010-12-12 14:58:38

回答

1

正常情況下,您的auto_increment字段也是您的主鍵,但並非必須如此。您可以將主鍵設爲複合索引(多列)。然後,自動增量將從第一列增加,爲您提供您正在尋找的內容。儘管您的表格不包含與新聞內容相關的ID,但您需要這樣做。

CREATE TABLE news_comments (
news_id INT, 
comment_id INT AUTO_INCREMENT, 
name VARCHAR, comment TEXT, 
PRIMARY KEY commment_key (news_id, comment_id) 
); 

如果news_id是1,則COMMENT_ID將開始遞增關閉的這一點,將在1開始爲每個唯一的news_id。

+0

+1:爲什麼人們-2你的答案?這是MyISAM表格的答案。也許你應該改爲使用OP列名:'create table news_comments(id int auto_increment,id_new int,name varchar(255),comment text,primary key(id_new,id))engine = myisam;' – Danosaure 2010-12-12 16:36:46

+0

是的,它只能用爲MyISAM表格。我應該澄清一點。 – 2010-12-13 01:01:26

2

首先,將您的唯一號碼存儲在與id分開的字段中。例如,uid INT約束爲UNIQUE(id_new, uid)id是,並且應該保持自動遞增的標識符字段,因爲它會讓您的生活更輕鬆(例如,您只能使用一個標識符而不是兩個來訪問您的評論)。

最簡單的做法是保留刪除的註釋(使用is_deleted字段),並使用MAX()查找給定is_new迄今分配的最大標識符。

另一種可能性是跟蹤之前在您的news表中分配的uid s,但它涉及更多工作和每個新評論的附加更新。