Как вставить значения в таблицу соединений?

Мой вопрос немного длинный, я прошу прощения за это.

Я добавляю значения в мои две таблицы, используя приведенный ниже код, но у меня также есть соединительная таблица с именем 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)

1

Решение

Если вы знаете, что вы только что вставили книгу с идентификатором 50 и изображение с идентификатором 92, и они имеют прямое отношение (т. Е. У этой книги есть это изображение на обложке), тогда запрос для заполнения соединительной таблицы просто:

INSERT INTO book_cover VALUES (50, 92);

Не существует секретного или специального запроса для соединительных таблиц. Уловка эффективно определяет, какие значения вставить; для этого используйте MySQL LAST_INSERT_ID() функция, к которой вы можете получить доступ через API mysqli как mysqli::$insert_id.

Вы должны получить удостоверение личности сразу же после INSERT заявление, которое произвело это, в том же сеансе. Вы можете сохранить его в пользовательской переменной, выполнить следующую вставку, а затем использовать идентификатор вставки из второй таблицы вместе с идентификатором, сохраненным из первой таблицы, в качестве параметров для вставки в таблицу соединений.

Это хорошая идея, чтобы обернуть все это в транзакцию, чтобы в итоге вы не вставили только часть информации о книге; либо все три запроса (или сколько угодно) должны быть выполнены успешно, либо все должны завершиться неудачей.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]