2014-01-30 61 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是基于1的,而不是从零开始的索引。

$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欢迎来到Stack Overflow!请接受这个答案,如果它正在工作(以及您提出的其他问题)。 –

+0

我感谢你的不错的提示。我不太了解php程序,但学习。我通常按​​日期进行编号(“ymdHis”)功能。我不清楚你的解释的第二部分,我可以如何使用订单日期与orderid一起来创建自定义数字。再次感谢。 – Kortoa