PHP/MySQL自定义唯一引用

PHP/MySQL自定义唯一引用,php,mysql,mysqli,Php,Mysql,Mysqli,我正在建立一个应用程序,将允许不同的工作小组张贴在网站上;我需要为每个帖子提供一个唯一的参考,这取决于他们所在的团队,因此其背后的逻辑如下 第1组-所有职位都有一个ID,例如[将随着每个职位2、3等而增加] CMPLX001 GNRLS001 第2组-所有职位都有一个ID,例如[将随着每个职位2、3等而增加] CMPLX001 GNRLS001 我的问题是,当每个团队需要从1开始,然后递增时,我如何递增每个 在将新条目插入数据库时,管理id的最佳方法是什么?您可以通过插入时的触发器来实现

我正在建立一个应用程序,将允许不同的工作小组张贴在网站上;我需要为每个帖子提供一个唯一的参考,这取决于他们所在的团队,因此其背后的逻辑如下

第1组-所有职位都有一个ID,例如[将随着每个职位2、3等而增加]

CMPLX001
GNRLS001
第2组-所有职位都有一个ID,例如[将随着每个职位2、3等而增加]

CMPLX001
GNRLS001
我的问题是,当每个团队需要从1开始,然后递增时,我如何递增每个


在将新条目插入数据库时,管理id的最佳方法是什么?

您可以通过插入时的触发器来实现这一点。我已创建了您的表的简化版本:

CREATE TABLE teams (id INT AUTO_INCREMENT PRIMARY KEY, 
                    name VARCHAR(20));

INSERT INTO teams (name) VALUES ('CMPLX'), ('GNRLS');

CREATE TABLE posts (id INT AUTO_INCREMENT PRIMARY KEY, 
                    team_id INT,
                    team_post_id INT,
                    notes VARCHAR(100));

ALTER TABLE posts ADD FOREIGN KEY (team_id) REFERENCES teams (id);

CREATE TRIGGER  update_tpid
BEFORE INSERT ON posts
FOR EACH ROW
  SET NEW.team_post_id = (SELECT IFNULL(MAX(team_post_id), 0) + 1
                          FROM posts 
                          WHERE team_id=NEW.team_id);


INSERT INTO posts (team_id, notes) VALUES
(1, 'team 1 first post'),
(2, 'team 2 first post'),
(1, 'team 1 second post'),
(1, 'team 1 third post'),
(2, 'team 2 second post'),
(1, 'team 1 fourth post'),
(2, 'team 2 third post'),
(1, 'team 1 fifth post');

SELECT concat(t.name, lpad(p.team_post_id, 3, '0')) AS post_id, p.notes 
FROM `posts` p
JOIN teams t ON t.id = p.team_id
ORDER BY p.id
输出:

post_id     notes   
CMPLX001    team 1 first post
GNRLS001    team 2 first post
CMPLX002    team 1 second post
CMPLX003    team 1 third post
GNRLS002    team 2 second post
CMPLX004    team 1 fourth post
GNRLS003    team 2 third post
CMPLX005    team 1 fifth post

如果您希望所有表都从1开始计数,则单独的表将给出所需的结果。如果在一个表上,id是主键,则它们不能具有相同的id编号。听起来更像是您希望在每个帖子中为团队提供外键引用,例如(在
post
)~
外键(团队id)引用团队(id)
。不要将关系数据编码为标识符