Самый простой способ дублировать строки в таблице, подтаблице и подтаблице - PullRequest
0 голосов
/ 07 сентября 2010

Я реализую функцию «Сохранить как копию» для небольшого веб-приложения, использующего MySQL.

Допустим, у меня есть три таблицы, например ...

TABLE Doc
 ID,
 title,
 text

TABLE DocAttributes
 ID,
 DocID -> Doc(ID)
 title,
 text

TABLE DocSubAttributes
 DocAttrID -> DocAttributes(ID)
 title,
 text

Чтоу нас есть ситуация, когда один документ может иметь несколько DocAttributes, и каждый DocAttribute может, в свою очередь, иметь несколько SubAttributes.

Теперь, если бы мне не пришлось беспокоиться о таблице DocSubAttributes, это было бы довольно простои я бы сделал что-то вроде этого ...

$insertID = INSERT INTO Doc (title, text) SELECT title, text FROM Doc WHERE ID = $docID;

INSERT INTO DocAttributes DocID, title, text SELECT $insertID AS DocID, title, text FROM Doc WHERE ID = $docID;

Однако, поскольку существует третья таблица «один ко многим», этот метод не работает.Мне нужно знать первичные ключи для каждой строки DocAttributes для создания соответствующих строк в DocSubAttributes.

Единственный известный мне способ сделать это - перебирать DocAttributes по одной строке за раз, выбирая все DocSubAttributes с помощьюкаждая итерация, а затем итеративное выполнение каждой вставки, снова по одной за раз.

Мне интересно: существует ли более простой способ дублировать эти строки в соответствующих таблицах, чтобы создать совершенно новый и отдельный объект данных безполагаться на итерацию?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

Вы можете сделать свой собственный первичный ключ перед вставкой, например,

$uniqueKey = md5($ID . $title . $text);

И вставьте его как DocAttributes первичный ключ (ID), который вы теперь знаете и используете для вставки DocSubAttributes

0 голосов
/ 07 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...