我正在尝试根据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发布了文章,他的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 :(得分:0)
增加art_id的策略与自动增量不同。所以你不能在查询中使用默认值。但是你可以写TRIGGER
,它将使用art_userid更新art_id ON INSERT
。
答案 1 :(得分:0)
在这种情况下,你应该做一个用户和文章与每个id链接的表。
因为这里没有自动增量,它只是一个数据管理:)
问候
答案 2 :(得分: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
,以便您指定条目按查询增加用户的总文章数
UPDATE total_articles SET total_articles=total_articles+1 WHERE userid=1
答案 3 :(得分:0)
嗯,我有点解决了它,但是少了一列。引擎类型需要是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时,您将从每个用户的1开始为art_id获取一个唯一值。