订单编号根据之前的编号自动创建

时间:2019-07-19 09:48:06

标签: php

我想做的是创建一个自动订单号。所以像这个日期-订单号 所以今天的第一顺序是 20190719-01 今天的二阶是 20190719-02

然后明天就需要像20190720-01 20190720-02等,依此类推。

我该如何实现?最好在PHP

2 个答案:

答案 0 :(得分:0)

str_pad()是您的朋友在这里。

$range = range(1,10);
$period = new DatePeriod(
     new DateTime('2019-07-17'),
     new DateInterval('P1D'),
     new DateTime('2019-07-20')
);

foreach ($period as $key => $value) {
    foreach($range as $inc){
      $seq = str_pad($inc,2,"0",STR_PAD_LEFT);    
      $order_number = $value->format('Ymd').'-'.$seq;
      echo $order_number.PHP_EOL;    
    } 
    echo PHP_EOL."===========".PHP_EOL;
}

工作演示: https://3v4l.org/R5POt

答案 1 :(得分:0)

通常,订单号是连续的,因此可以很容易地从AUTO INCREMENT字段中得出。就您而言,这并不容易。

您可以首先从数据库中获取今天之前所有订单的最高AUTO INCREMENT字段:

SELECT MAX(id) FROM orders WHERE DATE(orderDate) < CURDATE();

让我们将此ID称为$offsetId。如果尚无订单,则应为零。

然后首先将订单信息插入数据库,以便获得该订单的id。您可以使用MySQLi中的$con->insert_id或PDO中的lastInsertId()来执行此操作。我们称它为$orderId

以这种方式使用数据库的原因是为了防止两个订单获得相同的订单号。

现在您可以计算今天的订单号:

$orderNumber = date("Ymd") . "-" . sprintf('%02d', $orderId - $offsetId);

您可以按顺序将其存储在数据库中。

您可能应该预期每天会有超过99个订单...