Мой вопрос немного длинный, я прошу прощения за это.
Я добавляю значения в мои две таблицы, используя приведенный ниже код, но у меня также есть соединительная таблица с именем book_cover, и я хочу добавить данные в эту таблицу, чтобы установить связь между book_id и metadata_image_id (поскольку книга имеет более одного изображения обложки), Как я могу сделать это, когда я добавляю записи в первый раз?
Я не мог установить соединение, хотя я читал об объединениях.
Я использую MySQL и InnoDB.
Вот мой PHP-код для добавления данных:
$stmt = $sqli->prepare("INSERT INTO book(book_original_name, book_publication_date, book_synopsis) VALUES (?,?,?,?)");
$stmt->bind_param("sss", $_POST['book_original_name'], $_POST['book_year'], $_POST['book_synopsis']);
$stmt->execute();
$stmt->close();
$stmt = $sqli->prepare("INSERT INTO metadata_images(metadata_image_value, type, size) VALUES (?,?,?)");
$stmt->bind_param("sss", $name, $_FILES['book_cover']['type'], $_FILES['book_cover']['size']);
$stmt->execute();
$stmt->close();
Например, когда я добавил книгу с идентификатором 50, а metadata_image с идентификатором 92, я также хотел добавить book_id и metadata_image_id в мою таблицу соединений, чтобы создать связь между конкретной книгой и изображением. Какой SQL-запрос я должен использовать для этого?
Моя структура базы данных:
Table : book
book_id (PK and AI)
book_original_name
book_publication_date
book_synopsis
Table : metadata_images
metadata_image_id (PK and AI)
metadata_image_value
type
size
Junction Table : book_cover
book_id (Foreign key from book)
book_metadata_id (Foreign key from metadata_images)
Если вы знаете, что вы только что вставили книгу с идентификатором 50 и изображение с идентификатором 92, и они имеют прямое отношение (т. Е. У этой книги есть это изображение на обложке), тогда запрос для заполнения соединительной таблицы просто:
INSERT INTO book_cover VALUES (50, 92);
Не существует секретного или специального запроса для соединительных таблиц. Уловка эффективно определяет, какие значения вставить; для этого используйте MySQL LAST_INSERT_ID()
функция, к которой вы можете получить доступ через API mysqli как mysqli::$insert_id
.
Вы должны получить удостоверение личности сразу же после INSERT
заявление, которое произвело это, в том же сеансе. Вы можете сохранить его в пользовательской переменной, выполнить следующую вставку, а затем использовать идентификатор вставки из второй таблицы вместе с идентификатором, сохраненным из первой таблицы, в качестве параметров для вставки в таблицу соединений.
Это хорошая идея, чтобы обернуть все это в транзакцию, чтобы в итоге вы не вставили только часть информации о книге; либо все три запроса (или сколько угодно) должны быть выполнены успешно, либо все должны завершиться неудачей.
Других решений пока нет …