如何在序列中的同一插入物上插入序列号?

时间:2018-09-02 18:01:01

标签: php mysql insert

如何在表上插入一个数字,该数字是来自相同FK加1的记录数。

说明: 有一张表格将保存阶段数(1,2,3 ...)。 创建新阶段时,我想使列号为已存在的阶段数的总和。

我尝试使用COUNT

在planId 204上,将分为3个阶段。 在html表单上,我只想获取名称和年份。用户不对阶段编号负责。添加时为序号。

INSERT INTO 
        phase (
        idPlan,
        name,
        number,
        constructionYear
        )
        VALUES (
        204,
        'jj',
         HERE IS THE SEQUENTIAL NUMBER,
        2001
        )

CREATE TABLE `phase` (
 `idPhase` int(11) NOT NULL AUTO_INCREMENT,
 `idPlan` int(11) NOT NULL,
 `number` int(11) NOT NULL,
 `constructionYear` year(4) NOT NULL,
 `name` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`idPhase`),
 KEY `idPlan` (`idPlan`),
 KEY `idPlan_2` (`idPlan`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

1 个答案:

答案 0 :(得分:0)

您可以在INSERT上使用trigger来实现此目的:

CREATE TRIGGER `phase_insert`
BEFORE INSERT ON `phase` FOR EACH ROW 
SET NEW.number = (SELECT COALESCE(MAX(number),0)+1 FROM phase WHERE idPlan=NEW.idPlan)

这将在number的值上的INSERT之前找到idPlan的最大值,将其递增1,然后插入该值。如果没有iDPlan值的条目,则COALESCE(MAX(number),0)将返回0,因此将插入1。

例如在一个空表中

INSERT INTO phase (idPlan, name, number, constructionYear)
    VALUES (204, 'jj', 0, 2001), (204, 'xx', 0, 2002);
SELECT * FROM phase

输出:

idPhase     idPlan  number  constructionYear    name
3           204     1       2001                jj
4           204     2       2002                xx