У меня есть база данных с таблицей «клиент». В этой строке большинство клиентов имеют значение или число. Я пытаюсь получить наибольшее число, поэтому следующий, кто зарегистрируется, получит 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? Как я могу это исправить, чтобы у моих регистров был уникальный номер?
usr должен быть целым числом. изменить структуру поля таблицы
Не храните числа как строки символов. Вы получаете максимум строки. Для максимального числа преобразуйте его в число:
select max(usr + 0) as usr
from customer
Но, как рекомендуется в комментарии, если вы хотите автоинкрементное поле, используйте auto_increment
и определите столбец как истинное число.
Вы не можете использовать MAX()
с varchar
поле. если вы хотите использовать MAX (), вы должны преобразовать это поле в integer
вместо varchar
,
Любая операция, требующая сложения, вычитания, avg, max и т. Д., Не будет работать с типом поля varchar.
Хорошо, во-первых, @DeDevelopers прав, auto_incroment должен быть проинформирован, чтобы это не происходило.
Я настоятельно рекомендую использовать это в операторе вставки или обновления, так как даже если вероятность дубликатов мала, это может произойти;)
Я также рекомендовал бы повторно посетить архитектуру вашей таблицы, чтобы поддержать комментарий @DeDevelopers, но если нет, то поместите некоторую проверку ошибок или уникальный идентификатор ключа для этого столбца таблицы.