我使用的是mysql,由于没有root用户权限,所以不能在数据库创建触发器,只能用PHP来生成流水号,规则如下:
流水号格式 日期+四位数字编号 如20100721+0001=201007210001
每天编号都是从0001开始计算
201007210001
201007210002
201007210003
.
.
.201007220001
201007220002
201007220003
.
.
.用PHP如何实现呢?
流水号格式 日期+四位数字编号 如20100721+0001=201007210001
每天编号都是从0001开始计算
201007210001
201007210002
201007210003
.
.
.201007220001
201007220002
201007220003
.
.
.用PHP如何实现呢?
$pid = str_replace($today, '', $pid);//理论上会出错,如果流水号超出2010072220100722
$pid = $today . str_pad($pid, 4, "0", STR_PAD_LEFT);//低于4位,在前面补0,并和时间串连起来
echo $pid;
$i = date('i', time());
$s = date('s', time());
if(!isset($_COOKIE['d']) || $_COOKIE['d'] != date('d', time())){//如果不存在标识变量(今天的号)或者号不一样,那么从1开始
setcookie('d', date('d'), time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
setcookie('count', 1, time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
$count = 1;
}else{
$count = $_COOKIE['count'];
}
$l = strlen($count);
switch($l){
case 1:
$s = '000';
break;
case 2:
$s = '00';
break;
case 3:
$s = '0';
break;
default:
break;
}
$s .= $count++;
setcookie('count', $count, time() - $h * 3600 - $i * 60 - $s + 24 * 3600);
echo date('Ymd', time()).$s;
从数据库里取当天的最大值
如果没有,格式化当天的时期加 “0001”
如果没有,日期部分加上 数字部分加1.
insert 记录.
unlock table
这个流水号前面的日期一段如何获得,就不详述了,后面的用for语句,不足4位的补零
然后判断每个这个号是否已经存在于数据库中,如果发现某个号不在数据库中,取出这个值,然后跳出循环
更新定单号为:(time()+mysql_insert_id())这样应该不会重复了。