Php 订单条目的递增表列

Php 订单条目的递增表列,php,mysql,methods,Php,Mysql,Methods,我有一张储存订单的桌子。 id自动递增一个未自动递增的oid,然后是订单详细信息。 有些订单可以有多个条目,这就是为什么我有一个ID和一个订单ID 因此,如果您订购3个xwidgets和4个ZWidgets,它们都属于同一个OID 我正在使用以下代码分配下一个OID编号,我想知道这是否是最好的方法: $maxquery = mysql_query("SELECT MAX(oid) FROM ordr") or die(mysql_error()); $maxresult = mysql_fetc

我有一张储存订单的桌子。 id自动递增一个未自动递增的oid,然后是订单详细信息。 有些订单可以有多个条目,这就是为什么我有一个ID和一个订单ID 因此,如果您订购3个xwidgets和4个ZWidgets,它们都属于同一个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
您可能想使用。这将允许您插入数据,MySQL将为您选择一个索引。不过,您需要对数据进行非规范化处理

您将需要两个表:orders和order\u items,其中:

将order以空order_id插入orders表,并记录MySQL设置的order_id。现在使用您拥有的订单id插入订单项目,并让它自动生成项目id


通过这种方式,MySQL将生成数字,因此您不必担心两个订单试图使用相同的订单ID。此外,订单中的每个项目都不会重复任何订单信息。

首先,您可以简化SQL,从ordr中选择MAXoid+1作为下一个oid。其次,除非您锁定或以其他事务方式保护新OID的生成和后续使用,否则生成新OID是有风险的。第三,根本不要这样做-请看Brendan的答案。谢谢你。。。你是对的,布伦丹的答案正是我所需要的。我之所以被否决是因为这是一个愚蠢的问题吗?@DanielHunter-我猜人们之所以投票是因为这个问题很明显,但当然,只有当你已经知道答案时,这才是明显的:p我不会把它当作个人问题,请记住,只有一张赞成票才能抵消5张反对票看了之后,这是显而易见的。我一直在尽量减少表的数量,这真的让事情变得更难。再次感谢。我知道我错过了一些非常简单的东西。这很有道理。我想我只是需要另一个脑袋把我推向正确的方向。非常感谢。
orders
------
order_id
[any other columns]


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