自动递增两列

时间:2012-08-14 05:39:02

标签: php mysql

我正在尝试根据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

4 个答案:

答案 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获取一个唯一值。