PHP / MySQL пользовательские уникальные ссылки - PullRequest
0 голосов
/ 24 мая 2018

Я создаю приложение, которое позволит различным рабочим группам размещать сообщения;Мне нужно иметь уникальную ссылку для каждого поста в зависимости от того, в какую команду они входят, поэтому логика заключается в следующем:

Команда 1 - все посты будут иметь идентификатор, такой как [будет увеличиваться с каждым постом 2,3 и так далее.каждая из команд должна начинаться с 1, а затем увеличиваться

Какой лучший способ управлять идентификаторами при вставке новых записей в базу данных?

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете сделать это с помощью триггера при вставке.Я создал упрощенную версию ваших таблиц:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...