SELECT(MAX)不会超过10 - 使用phpmyadmin的mysql

时间:2013-05-06 03:13:21

标签: mysql select phpmyadmin max

我正在创建一个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'。

我没有对可以输入的行数或类似的行设置任何特定限制。

2 个答案:

答案 0 :(得分:0)

Idchar(20)所以order by Id使用字符串排序。您可以使用castconvert函数对数字进行排序。

像: 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,然后期望增量能够正常工作。