2012-08-14 56 views
0

我想自动递增基于art_userid的下表中的art_id,这是可能的,而无需编写任何额外的PHP代码? gen_id必须保留并且不能被删除。我使用MySQL和PHP自动递增两列

CREATE TABLE `articles` (
     `gen_id` INT(10) NULL AUTO_INCREMENT, 
     `art_id` TINYINT(3) NULL DEFAULT '0', 
     `art_userid` INT(10) NULL DEFAULT '0', 
     `art_title` VARCHAR(150) NULL DEFAULT NULL, 
     PRIMARY KEY (`gen_id`) 

所以在最后,如果用户1贴出了一篇文章,他art_id将为1下一个他的职位将有ID为2

但是,如果用户2贴和文章,他的art_id将再次为1。他发布的下一个会有id 2.不是第一个用户art_id的延续。

gen_id | art_id | art_userid | art_title 
----------------------------------------- 
1   1  1   Title A 
2   2  1   Title B 
3   1  2   Title A 
4   2  2   Title B 
5   3  1   Title A 
+0

在这种情况下,您始终可以使用触发器。 http://dev.mysql.com/doc//refman/5.0/zh-CN/create-trigger.html – Shubhansh 2012-08-14 05:45:06

+1

阅读MyISAM表中的章节http://dev.mysql.com/doc/refman/5.0/en/example -auto-increment.html – 2012-08-14 05:46:03

+0

我听说使用UNIQUE KEY会有帮助... – Norman 2012-08-14 07:08:27

回答

0

那么,我有点sol把它,但少了一列。引擎类型需要是MyIsam。然后做一个创造这样的:

CREATE TABLE `articles` (
    `art_id` INT(10) NOT NULL AUTO_INCREMENT, 
    `art_userid` INT(10) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`art_userid`, `art_id`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=MyISAM; 

然后,当你插入art_userid,你会得到art_id从1开始每个用户的独特价值。

0

您增加art_id的策略与自动增量不同。所以你不能在查询中使用默认的。但是您可以编写TRIGGER,它将使用art_userid将art_id更新为INSERT

0

在这种情况下,你应该做一个链接用户和文章与每个ID的表。

因为这里没有自动增量做的,它只是一个数据管理:)

问候

0

更常见的做法是

CREATE TABLE `articles` (
     `id` INT AUTO_INCREMENT, -- entry in table 
     `gen_id` INT(10) NULL , 
     `art_id` TINYINT(3) NULL DEFAULT '0', 
     `art_userid` INT(10) NULL DEFAULT '0', 
     `art_title` VARCHAR(150) NULL DEFAULT NULL, 
     PRIMARY KEY(`id`) 
) 

使用id column表,所以你specifie项通过查询增加用户的总文章数 UPDATE total_articles SET total_articles=total_articles+1 WHERE userid=1