MySQL многие ко многим с уникальными ключами и обновлением / выбором, если существует, вставьте
В моей цели иметь отношение "многие ко многим" в моей базе данных MySQL, я пришел к другому мосту для построения.
Текущие таблицы:
Пользователи (идентификатор, имя)
Теги (идентификатор, имя)
User_Tags (user_id, tag_id)
Вот цель:
Я хотел бы иметь возможность взять тег, т.е. #fb
и вставить его в мой Tags
база данных, которая имеет уникальное ограничение на name
и если тег существует, я хотел бы вернуть его id
Я хотел бы вставить tag.id
и текущий пользователь user.id
в User_Tags
, У меня нет никаких уникальных ограничений на User_Tags
Я хотел бы иметь возможность отслеживать наиболее часто используемые теги пользователя и представлять их в списке, упорядоченном по частоте использования.
В настоящее время я разрабатываю этот проект на PHP, используя подготовленные заявления.
Кроме того, производительность в настоящее время не является проблемой, поскольку количество моих пользователей все еще довольно мало, но оно неуклонно растет и может стать проблемой в будущем.
1 ответ
Вы можете использовать ON DUPLICATE KEY UPDATE и LAST_INSERT_ID(expr) в MySQL, чтобы получить идентификатор тега независимо от того, был ли он вставлен или уже был там, например
INSERT INTO
Tags
(name)
VALUES
(:name)
ON DUPLICATE KEY UPDATE
id = LAST_INSERT_ID(id)
а также
INSERT INTO
User_Tags
(user_id, tag_id)
VALUES
(:userid, LAST_INSERT_ID())