2014-01-30 4 views
0

Я попытался создать пользовательский номер заказа. Моя таблица MySQL похожа: tblOrder id int (11) AI; ordno varchar (50);Сгенерируйте заказной номер заказа

Я пытаюсь использовать следующую функцию внутри php-блока как перед записью добавленного события для этого.

{ 

$sql="select max(substr(ordno,9)) as mx from ord where substr(ordno,7,2)=month(now()) order by mx"; 
$rs=CustomQuery($sql); 
$data=db_fetch_array($rs); 
$str="OR-"; 
$str2=date("Ymd"); 
$str3=($data["mx"]+1); 
$values["ordno"]="$str$str2".str_pad($str3, 5, 0, STR_PAD_LEFT);} 

Проблема заключается в том, когда я запускаю этот код он всегда дает мне тот же номер заказа как OR-2014013000001 для всех входа записи. Он не меняется. Не могли бы вы помочь мне? Заранее спасибо.

ответ

0

Я думаю, что реальная проблема скрывается по тому, как вы разбираете составную колонку ordno. Помните, что SUBSTRING - это однонаправленная, а не нулевая индексация.

$sql="select max(substring(ordno,12, 5)) as mx from ord where 
     substring(ordno, 8, 2)=month(now()) order by mx"; 

... похоже, правильный синтаксический анализ, чтобы получить нужные значения.

Было бы лучше сохранить данные заказа в отдельных полях вместо значения кодирования в один столбец. Вы можете столкнуться с этим таким образом, но если вы его можете изменить, почему бы не вычислить номер заказа на лету, захватив хорошо структурированный столбец порядка заказа date и столбец порядка заказа int?

+0

безупречный. Работает. Спасибо за вашу помощь. – Kortoa

+0

@Kortoa Добро пожаловать в переполнение стека! Пожалуйста, примите этот ответ, если он работает (а также другие вопросы, которые вы задали). –

+0

Я ценю ваши приятные советы. Я мало что знаю о программе php, но изучаю. Я обычно делаю нумерацию по дате («ymdHis»). Я не совсем понимаю, о второй части вашего объяснения, как я могу использовать дату заказа в сочетании с orderid для создания пользовательского номера. Еще раз спасибо. – Kortoa

Смежные вопросы