PHP / MySQL自定义唯一引用

时间:2018-05-24 06:07:53

标签: php mysql mysqli

我正在构建一个允许不同工作团队发布的应用程序;我需要为每个帖子提供一个独特的参考,具体取决于他们所在的团队,因此其背后的逻辑如下

第1组 - 所有帖子都有一个ID,例如[将随每个帖子增加2,3等]

CMPLX001

第2组 - 所有帖子都会有一个ID,例如[将随每个帖子增加2,3等]

GNRLS001

我的问题是如何增加每一个,因为每个团队需要从1开始然后增加

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

1 个答案:

答案 0 :(得分:1)

您可以在插入时使用触发器执行此操作。我创建了表格的简化版本:

@Html.LabelFor(s => s.RememberMe, Html.Sitecore().DictionaryContent(Dictionary.LoginRememberMeFieldName, true).ToString(), new { @class = "yourCSSClass" }))

输出:

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