У меня довольно сложная база данных с множеством связей с внешним ключом, и я хочу знать, есть ли простой способ вставить запись в одну из этих таблиц.
Эта таблица содержит некоторые внешние ключи.
CREATE TABLE package (
id INT PRIMARY KEY AUTO_INCREMENT,
master_id INT NOT NULL UNIQUE,
library_id INT NOT NULL,
FOREIGN KEY (master_id) REFERENCES master(id),
FOREIGN KEY (library_id) REFERENCES library(id)
) DEFAULT CHARSET = utf8;
Когда эта таблица настроена, она содержит только два внешних ключа и первичный ключ, означающие, что все здесь — числа. Это то, что я хочу, но это также означает, что INSERT
утверждение для этой таблицы будет выглядеть
INSERT INTO package (master_id, library_id) VALUES (235, 12);
или что-то типа того…
Есть ли способ сделать заявление вроде:
INSERT INTO package (master_id, library_id)
VALUES ([master_field], [library_field]);
где master_field
а также library_field
записи в этих таблицах? Я не уверен, как это будет обрабатываться, потому что никакое другое поле в основной таблице не является уникальным, так что бы произошло, если бы было две записи …
Во всяком случае, если кто-нибудь знает, как сделать что-то подобное, это будет с благодарностью! Делать все это внутри MySQL предпочтительнее, но у меня нет проблем с использованием PHP.
Вы можете сделать все это в MySQL, используя инструкцию SELECT для предоставления значений для INSERT. Например:
INSERT INTO package (master_id, library_id)
SELECT (SELECT master_field FROM master_table WHERE {some condition} LIMIT 1), (SELECT library_id FROM library_table WHERE {some condition} LIMIT 1)
Возможно, вы захотите не делать этого таким образом, а вместо этого сделайте отдельные операторы SELECT в вашем PHP-коде, чтобы вам было легче обрабатывать ошибки, если, например, не указан library_id, соответствующий вашему условию.
Других решений пока нет …