2014-11-22 3 views
0

Мне сложно определить, как связать строки базы данных в проекте PHP/MySql. В настоящее время скрипт отправки заказов разбивает информацию и сохраняет ее в 2 таблицы.Ссылки на таблицы Mysql/Внешний ключ?

Первый называется «Заказы» и содержит:

$OrderId, $CustomerName, $CustomerEmail, $OrderTotal, $OrderTaxes 
//and other infos about the ORDER 

Второй называется «Items» и содержит все Купленные продукты Infos:

$ProductId, $OrderedQty 
//for each one and such... 

Он должен быть таким потому что таблица «Items» будет искать различные «отделы», которые будут показаны только части заказов, за которые они отвечают. Но все они должны получить информацию «Заказы» для целей доставки.

Зная, что столбец «OrderId» является первичным ключом, сгенерированным в самой таблице «Заказы», ​​и что мои команды INSERT TO выполняются одновременно, как я могу связать столбец «Идентификатор заказа» в обоих таблицы?

Должен ли я генерировать случайный ключ для их соответствия?

Если бы я использовал внешний ключ, как бы база данных узнала, какой продукт идет с каким заказом, так как они отправляются одновременно?

Или он достаточно быстр, чтобы INSERT в «Заказы» -> SELECT $ OrderID -> INSERT в «Элементы»?

Как обычно это делается? Не могу понять это.

Заранее благодарим за вашу драгоценную помощь!

ответ

1

Приобретенная информация о продукте должна содержать дополнительную таблицу купленных таблиц товаров, называемую orderid, поэтому вы знаете, какие продукты принадлежат какому заказу. Что касается вставки в базу данных, это зависит от того, что вы используете для выполнения запросов. Некоторые классы запросов позволяют запускать несколько операторов запросов в один раз, если это так, вы можете запустить что-то подобное:

INSERT INTO Orders (OrderId, CustomerName, CustomerEmail, OrderTotal, OrderTaxes) Values(...) 
SET @order_id = LAST_INSERT_ID(); 
INSERT INTO boughtItems (OrderId,ProductId,OrderedQty) Values (@order_id, :productid_1, :name_1),(@order_id, :productid_2, :name_2),(@order_id, :productid_3, :name_3) .... 

В случае заказа вам необходимо будет выполнить инструкцию вставки на заказах, а затем получают основной ключ. Посмотрите на эти ссылки:

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

В качестве альтернативы можно также выполнить 2 запросов.Сначала вставка запроса с последующим этим запросом:

SELECT LAST_INSERT_ID() as id; 

Другие ссылки по теме:

+0

Как о том, когда 2 человека отправлять свои заказы в то же время, LAST_INSERT может потенциально вернуть неправильное удостоверение личности? Кроме того, «добавьте лишнюю колонку в таблицы купленных продуктов, называемые orderid, поэтому вы знаете, какие продукты принадлежат тому заказу», чего я пытаюсь достичь, но мне нужно получить это значение ID за раз, пока оно еще не создано!? Я делаю что-то неправильно –

+0

LAST_INSERT_ID - это соединение, поэтому, если вы не произвольно используете другие запросы в одном и том же соединении, он должен быть последовательным. См. Это [страница] (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id). – user254948

+0

Можете ли вы объяснить мне «соединение»? Извините :) –