简单介绍如何使用php取得订单流水号,mysql使用DATE_FORMAT与FROM_UNIXTIME判断是否为当日订单,根据已存在的订单笔数更新流水号末码。
[cc lang=”php”]/**
* 产生当天订单流水号
*
* @return string
*/
function genSn()
{
$oper = ‘DATE_FORMAT(FROM_UNIXTIME(t.time),”%Y%m%d”) = ‘
. ‘DATE_FORMAT(FROM_UNIXTIME(‘ . $_SERVER[‘REQUEST_TIME’] . ‘),”%Y%m%d”) ‘
. ‘LIMIT 1’;
$sql = ‘SELECT o.order_sn ‘
. ‘FROM order AS o ‘
. ‘WHERE ‘ . $oper . ‘ ‘
. ‘ORDER BY o.order_sn DESC’;
$res = $db->getOne($sql);
$lastNum = (int)mb_substr($res, -4, 4);
$orderSn = ‘PO’ . date(‘Ymd’, $_SERVER[‘REQUEST_TIME’]) . str_pad(($lastNum + 1), 4, ‘0’, STR_PAD_LEFT);
return $sn;
}
[/cc]
产生订单流水号之后在insert资料库时可能会有预期外的重复流水号发生,因此可以使用sql执行错误码来决定是否重新取号或者停止取号。
产生订单编号。
执行sql insert语句。
取得sql语法执行错误码。
若错误码大于0以及错误码等于1062代表资料重复,停止行为。
[cc lang=”php”]do {
// 取得订单编号,请使用你的取得方式
$sn = genSn();
// 执行insert sql,请使用你的sql执行方式
$sql = ‘INSERT INTO (order_sn) VALUES (‘ . $sn . ‘)’;
$db->query($sql);
// 取得sql error错误码,请使用你的错误码取得方式
$errorNo = getErrorNo();
// 资料重複以外的错误则停止回圈
if ($errorNo > 0 && $errorNo != 1062) {
break;
}
} while ($errorNo == 1062); // 错误码为1062则重复继续回圈[/cc]