Вернуть Id дубликата, если он существует mysql

117
23 ноября 2021, 10:00

Всем доброго вечера. Есть 3 связанные таблицы, примерная схемка на фото

Суть проста: У автора должно быть несколько книг. Делаю запросы на INSERT в таблицы К примеру был отправлен post запрос authors.name = 'Gogol', books.title = 'VIY' добавляем транзакциями все эти данные в таблицы и в books_authors вставляем последние id.

НО, при следующем пост запросе authors.name = 'Gogol', books.title = 'Death Souls' - возникает ошибка, нельзя добавлять дубликат в таблицу authors.

Вопрос в следующем, как мне вернуть id того дубликата, что уже есть в таблице, для вставки в books_authors?

Answer 1

Используйте такую конструкцию

INSERT INTO authors (
  name
) VALUES (
  'Gogol'
) ON DUPLICATE KEY UPDATE
  id = LAST_INSERT_ID(id);

Этот запрос вставит новую запись, если ее нет, и вернет ее id через LAST_INSERT_ID()/mysql_insert_id(). Если же такая запись есть, то выполнится строчка

id = LAST_INSERT_ID(id)

которая по сути не обновляет поля, но устанавливает значение LAST_INSERT_ID.

Для работы данной конструкции по полю name таблицы authors должен быть построен уникальный ключ

Answer 2
INSERT IGNORE INTO books (title)
VALUES ('title 1'), ('title 2'), ... ;
INSERT IGNORE INTO authors (name)
VALUES ('name 1'), ('name 2'), ... ;
INSERT IGNORE INTO books_authors (author_id, book_id)
SELECT authors.id, books.id
FROM authors, books
WHERE (authors.name, books.title) IN ( ('name 1', 'title 1'),
                                       ('name 2', 'title 2'),
                                       ... );

как мне вернуть id того дубликата

А вот дубликаты надо удалить. ВСЕ.

READ ALSO
Как в таблице переназначить все id

Как в таблице переназначить все id

Есть таблица post, как мне в этой таблице переназначить все id к записям, но что бы новые Id начинались с нужного числа, например с 1221 и далее по возростанию

188
Многотабличный запрос MYSQL

Многотабличный запрос MYSQL

Есть 4 таблицы, мне нужно выбрать всех пользователей(users) со всеми воронками(funnels) которые у них естьТо есть у одного юзера есть несколько воронок

92