Инкрементный столбец таблицы для ввода заказа - PullRequest
0 голосов
/ 27 октября 2011

У меня есть таблица, в которой хранятся заказы.
id (автоинкремент) oid (не автоинкремент) и затем детали заказа.
в некоторых заказах может быть несколько записей, поэтому у меня есть идентификатор и Oid (идентификатор заказа), так что если вы заказываете 3xwidgets и 4Zwidgets, они идут под одним и тем же OID

. Я использую следующий код для назначения следующего номера OID, и мне интересно, является ли это лучшим способом:

$maxquery = mysql_query("SELECT MAX(oid) FROM ordr") or die(mysql_error());
$maxresult = mysql_fetch_array($maxquery);
$maxid = $maxresult['MAX(oid)'];
$oid = $maxid + 1; -- this gives me a new OID for the next entry since i can not auto increment this column

1 Ответ

1 голос
/ 27 октября 2011

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

Вам понадобятся две таблицы: orders и order_items, где:

orders
------
order_id
[any other columns]


order_items
-----------
item_id
order_id
[any other columns]

Вставьте порядок в таблицу orders с помощью NULL order_id и запишите order_id, установленный MySQL. Теперь вставьте order_item, используя order_id, который у вас есть, и позвольте ему автоматически сгенерировать item_id.

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

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