2010-12-12 58 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,但它涉及更多工作和每个新评论的附加更新。