我有一个包含表'客户'的数据库。在这一行中,大多数客户都有一个值或数字。我试图获得最高的数字,以便下一个注册的人将获得highest number + 1
。行'usr' is varchar(255)
。
它正在使用以下代码:
$query = "SELECT MAX(usr) AS usr FROM customer";
$result = mysql_query($query);
$record = mysql_fetch_assoc($result);
$maxID = $record['id'];
$nieuwID = $maxID + 1;
当我今天检查时,我看到两个最新的寄存器都有10号。当我检查我的查询时它返回9.为什么它返回9而不是10?我该如何解决这个问题,以便我的寄存器有一个唯一的编号?
答案 0 :(得分:2)
usr应该是整数。改变表字段结构
答案 1 :(得分:0)
不要将数字存储为字符串。你得到一个字符串最大值。对于数字最大值,请将其转换为数字:
select max(usr + 0) as usr
from customer
但是,正如评论中所建议的那样,如果您想要一个自动递增字段,请使用auto_increment
并将该列定义为真正的数字。
答案 2 :(得分:0)
您无法将MAX()
与varchar
字段一起使用。如果你想使用MAX(),你必须将该字段转换为integer
而不是varchar
。
任何需要加法,减法,平均值,最大值等的操作都不适用于varchar字段类型
答案 3 :(得分:0)
首先确定@DeDevelopers是正确的,应该强制auto_incroment来阻止这种情况发生。
我强烈建议你在插入或更新语句中使用它,即使重复的概率很低,也可能发生;)
我还建议您重新访问您的表架构以支持@DeDevelopers注释,但如果没有,则对该表列进行一些错误检查或唯一键标识符