【问题标题】:php code generation from 00001 to 99999 for any particular month任何特定月份从 00001 到 99999 的 php 代码生成
【发布时间】:2014-07-07 10:52:35
【问题描述】:

我正在使用这个 php 代码来生成代码

<?php 
$year = date('y'); //gets 2 digits of year, ex, year 2014 as 14
$month = date('m');//gets 2 digits of month, ex, month July as 07
$day = date('d');//gets 2 digits of date, ex, date 07
$random = substr( md5(rand()), 0, 4); //generate 4 digits random number using 0-9 and a-z
$code = $year . $month . $day . $random;
echo $code;
?>

接下来我尝试在此代码中添加一个从 00001 到 99999 的 5 位数字

表示代码应该看起来像 YYMMDDXXXXNNNNN,虽然我已经实现了 YYMMDDXXXX,但我仍在努力处理 NNNNN 部分 (00000-99999)。

如何在每个用户生成条目时制作并连接到这个变量 $code。

我想在这里提一下,这是表格的代码,当第一个用户在任何日期填写表格时,给他的 NNNNN 将是 00001,对于第二个用户 00002,第三个用户 00003 等等,无论特定月份中的任何日期。

另外,当月份从当前更改为下一个时,我希望再次将 NNNNN 重置为 00001。

我怎样才能实现这两件事。

有什么想法吗?

这里是sn-p http://codepad.org/cgPLEtr7

【问题讨论】:

  • 需要存储之前分配的NNNNN值。然后检索它,如果同一个月添加一个。问题是在您检索它和将更新的值分配给记录之间,值可能会发生变化。
  • @Kickstart 这将是第二部分。首先,如何生成这个?
  • 您需要将计数器和月份保存在服务器或数据库中。每月更改一次重置计数器。
  • @SubirKumarSao 你能说明如何实现吗?
  • 生成一个随机数很容易(SUBSTR("00000".RAND(0,99999), -4)),但是这个数字可能已经分配好了

标签: php mysql


【解决方案1】:

你可以使用:

$form = sprintf("%05s", 1);
$code = $year . $month . $day . $random . $form;

正确获取$code的值。

以下是关于您的“其他”查询的更多提示。

您可以尝试设置另一个 MySQL 表来存储您的 5 位表单编号,最初将是“00000”,作为 varchar

然后,在数据 insert 到您的原始表中,触发 MySQL 在 cast 之后将该值更新 +1,如:https://stackoverflow.com/a/6873429/3318560

通过 PHP 将该值绘制到您的表单中,并将其作为隐藏值保留在那里,您将附加到您的 $code

最后,您可以使用 MySQL 事件每月将您的值重置为 00000

【讨论】:

    【解决方案2】:

    首先,创建一个表来存储计数器:-

    CREATE TABLE month_counter
    (
        id  INT NOT NULL AUTO_INCREMENT,
        aMonth CHAR(6),
        aCounter INT ,
        PRIMARY KEY (`id`),
        UNIQUE KEY `aMonth` (`aMonth`)
    );
    

    然后当你想要一个新的值时使用:-

    INSERT INTO month_counter (id, aMonth, aCounter)
    VALUES(NULL, '201407', 1)
    ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), aCounter=aCounter+1
    

    当您从 php 执行该查询时,您可以使用 LAST_INSERT_ID() 来获取最后插入的行的 id,然后您可以从中选择值:-

    $sql = "SELECT aCounter FROM month_counter WHERE id = ".LAST_INSERT_ID();
    

    请注意,INSERT 和 SELECT 之间的值可能会发生变化,因此您应该将其包装在事务中

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 1970-01-01
      • 2017-06-07
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多