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())
Другие вопросы по тегам