Всем доброго вечера. Есть 3 связанные таблицы, примерная схемка на фото
Суть проста: У автора должно быть несколько книг.
Делаю запросы на INSERT в таблицы
К примеру был отправлен post запрос authors.name = 'Gogol', books.title = 'VIY'
добавляем транзакциями все эти данные в таблицы и в books_authors
вставляем последние id
.
НО, при следующем пост запросе authors.name = 'Gogol', books.title = 'Death Souls'
- возникает ошибка, нельзя добавлять дубликат в таблицу authors
.
Вопрос в следующем, как мне вернуть id
того дубликата, что уже есть в таблице, для вставки в books_authors
?
Используйте такую конструкцию
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
должен быть построен уникальный ключ
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 того дубликата
А вот дубликаты надо удалить. ВСЕ.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть таблица post, как мне в этой таблице переназначить все id к записям, но что бы новые Id начинались с нужного числа, например с 1221 и далее по возростанию
Есть 4 таблицы, мне нужно выбрать всех пользователей(users) со всеми воронками(funnels) которые у них естьТо есть у одного юзера есть несколько воронок