php - 根据模式生成唯一的 id

标签 php mysql yii2

我有一个表(比如发票),其中有一个主键(自动增量)。 但我需要另一个引用号,它也应该是唯一的,并且应该基于以下模式。

INV-{Ymd}-{unique number for that day}

地点: INV - 是联系人前缀 {Ymd} - YYYMMDD 格式的日期 {unique number for that day} - 是当天的序列号。(应自动递增,但每天应从 0 开始。

示例

  • INV-20160909-0001
  • INV-20160909-0002
  • INV-20160910-0001

最佳答案

您可以使用同一个表来完成此操作,无需创建另一个表或列。

假设您的列名称是发票表中的reference_number

首先,从表中获取最新记录。(您可以通过主键插入日期获取它)

$data=Invoice::find()->select('reference_number')->orderBy(['your_primary_key' => SORT_DESC])->one();

if($data) // record found
{
  $temp= explode('-',$$data['reference_number']); // devide data in array

  // compare with today's date,
  if((int)$temp[1]==(int)date('Ymd')) 
  {
    // if today's date match than increase number and create reference_number
    $reference_number="INV".date('Ymd').((int)$temp[2]+1);
  }
  else // reference_number is from old date so you can create from today's date
  {
  $reference_number="INV".date('Ymd')."0";
  }
}
else // record not found,(no record in your table)
{
  // you can directly create reference_number from today's date

  $reference_number="INV".date('Ymd')."0";
}

关于php - 根据模式生成唯一的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545081/

相关文章:

php - 图像和基于浏览器的图表的图表框架

mysql - 将mysql 5.5降级到mysql 5.0或5.1会导致数据丢失吗?

mysql - 为什么MYSQL中WHERE语句中的子查询这么慢?

mysql - 为什么会发生pdo异常?它显示未找到数据库驱动程序

mysql - 获取所有当前连接到 yii2 ActiveQuery 中的查询

php - 如何在 PHP html5 上传中获取服务器响应

php - 我如何从 coutroller 传递数据以在 zend famwork 中查看

javascript - 寻找 PHP 中等效的 JavaScript 数学代码

mysql 创建多个选择以将 max 放入所有行

php - 安装 Yii2 时出错