вставить значение по умолчанию таблицы в другую таблицу

1

Упрощенная версия:

У меня есть таблица с именем books (book_id, book_title), где book_id - это первичный ключ и серийный номер (поэтому он автоматически назначается без ввода его).

У меня также есть другая таблица с именем book_version (id, book_id, book_version), где book_id является внешним ключом для первой таблицы.

В форме я беру название и версию книги. Я вставляю заголовок в первую таблицу и должен вставлять сгенерированную book_id вместе с версией во вторую таблицу.

Как я могу это сделать без трех отдельных запросов (одна вставка для первой таблицы, одна выбирает, чтобы получить идентификатор и одну вставку для второй таблицы)?

Идея здесь состоит в том, что одна и та же книга может быть опубликована несколько раз с небольшими изменениями, поэтому я хочу отслеживать разные версии.

  • 2
    Я думаю, что это проблема, которую вы можете решить только с помощью триггеров .
  • 3
    Ваш вопрос будет более понятным, если вы добавите операторы создания таблиц и SQL в дополнение к вашему прозе.
Показать ещё 2 комментария
Теги:

4 ответа

1
Лучший ответ

Используйте триггер после вставки в первой таблице:

http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

Триггер после вставки может ссылаться на вставленную строку, а затем вам нужно запустить только 1 оператор, чтобы вставить версию.

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

Это лучший способ сделать это, ИМО.

1

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

1
 mysql_insert_id() is mysql function which gets last inserted id into database.

<?php
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
mysql_select_db('mydb');

here book_id is autofill 

mysql_query("INSERT INTO books ('book_title') values ('kossu')");

$ last_insert_id = mysql_insert_id();

Теперь для второго идентификатора таблицы является автозаполнение

mysql_query("INSERT INTO book_version ('book_id', 'book_version') values ($last_insert_id,'6.48' )");

?>

1

Я бы использовал хранимую процедуру и делегировал ей работу. Запросов еще будет 3, но эти 3 запроса будут выполнены в MySQL. Ваш PHP-код будет рассматривать только как 1 запрос,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню