我正在创建一个PHP脚本,将行插入一个名为orders的数据库,该数据库基于使用会话数组$ _SESSION ['cart']存储在关联数组中的购物车。数据库看起来像这样:
orders
----------+--------------+-------------+-------------+-------------+
Id | Username | Item1Id | Item2Id | Item3Id |
----------+--------------+-------------+-------------+-------------+
1 | a@aa.com | 8000001 | 8000002 | 800003 |
----------+--------------+-------------+-------------+-------------+
5 | a@aa.com | 7000001 | 6000002 | 700003 |
----------+--------------+-------------+-------------+-------------+
7 | b@bb.com | 8000001 | 8000002 | NULL |
----------+--------------+-------------+-------------+-------------+
10 | a@aa.com | 3000001 | 1000002 | 800009 |
----------+--------------+-------------+-------------+-------------+
Id列类型为CHAR(20),因为我可能会选择稍后使用字母。
作为插入行的一部分,我需要为订单行分配一个Id(主键),该行将设置为比当前找到的最高Id编号高1。
整个剧本完美无缺;查询在表中找到最高Id并将其递增1并将其分配给变量以用作插入查询的一部分。唯一的问题是“SELECT MAX(Id)FROM orders”似乎找不到高于9的任何值。是否存在阻止SELECT MAX(Id)识别任何两位数字的条件?
我写得像:
$highestID = mysqli_query($conn, "SELECT MAX(Id) FROM orders");
$orderID = $highestID +1;
除了Id number1和2之外,我已经清空了数据库。运行PHP脚本会插入ID为3,4,5的新行,除非它达到10,脚本无法生成错误复制主键'10'(来自$ orderID的值)。即使手动输入Id为'25'的数据库中的行,$ orderID仍然只在我回显结果时返回'10'。
我没有对可以输入的行数或类似的行设置任何特定限制。
答案 0 :(得分:0)
Id
为char(20)
所以order by Id
使用字符串排序。您可以使用cast
或convert
函数对数字进行排序。
像:
select max(cast(Id as unsigned)) from orders
答案 1 :(得分:-1)
你真的不需要为自动增量PK经历所有麻烦。这是你如何去做的。
第1步:在您的phpmyadmin中,编辑您的表格,然后选中PK列的A_I
复选框。
第2步:从PHP插入时,请将该字段留空。它会自动为您的PK分配current max + 1
的值。
例如,
$query = "Insert into mytable (id, name) values ('', 'Name1'), ('', 'Name2')";
编辑:你真的不能拥有CHAR(20)
PK,然后期望增量能够正常工作。