我正在构建一个应用程序,它将允许不同的工作团队发布;我需要为每个帖子提供一个独特的参考,具体取决于他们所在的团队,因此背后的逻辑如下
团队 1 - 所有帖子都有一个 ID,例如 [将随着每个帖子 2、3 等的增加而增加]
CMPLX001
团队 2 - 所有帖子都有一个 ID,例如 [将随着每个帖子 2、3 等的增加而增加]
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