我尝试生成自定义订单号。我的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。它不会改变。你能帮我吗?提前致谢。

最佳答案

我认为,真正的问题被解析复合ordno列的方式隐藏了。请记住,SUBSTRING是基于1的索引,而不是基于0的索引。

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


...似乎是获取所需值的正确解析。

最好将订单数据存储在单独的字段中,而不是将含义编码到单个列中。您可能会被这种方式所困扰,但是如果您可以对其进行编辑,为什么不通过抓住结构良好的date订单日期列和int订单序列列来即时计算订单号?

10-07 21:27