【问题标题】:Increment a variable with some letters in it增加一个包含一些字母的变量
【发布时间】:2015-05-26 04:30:10
【问题描述】:

我想在我的数据库中存储记录,并将这些值作为它们的 reference_id

CD000001
CD000002
CD000003
CD000004
etc

在我保存一条记录之前,我想检查最后一条记录的 reference_id,然后为下一条记录添加一个。例如,下一条记录应该是CD000005

我可以获取最后一条记录,做一个substr($var, 2); 以摆脱CD部分,以便我可以进行计算。但是我得到的是CD5。我不想手动注入那些00000,因为当我达到记录 10 时,就会出现危机。我会得到CD0000010 而不是CD000010.

请帮忙。

【问题讨论】:

  • 你有没有试过看看如果你这样做$myVar = 'CD000001; $myVar++; echo $myVar;会发生什么?
  • 但是依靠 PHP 递增一个值来避免数据库记录中的重复是不好或有效的
  • 我的建议是取下 CD 并将其存储在 $variable 中并让数字发挥作用,但是当您出于显示目的调用它时,您可以简单地将其与 reference_id 连接
  • 我建议您将主键设置为常规自增整数;如果您手动输入,则为您的企业 ID 设置一个单独的字段,或者如果您知道您的企业 ID 将始终为“CD”+ 填充的数据库 ID,则只需以上述方式对其进行格式化以输出。另外,不要“注入”00000,使用正确的格式:sprintf("CD%06d", 10); 给出正确的"CD000010",没有危机。
  • 特别是如果您正在编写一个 Web 应用程序(并且由于您使用的是 PHP,那么您很有可能是),您真的不想自己增加您的 ID,因为您可以进入竞争条件,这将使您的两个对象具有相同的 ID;数据库中的 autoincrement 字段正是它的正确对策,您不应该发明自己的自制解决方案。

标签: php mysql string


【解决方案1】:

使用 str_pad PHP 函数获取 reference_id:

$reference_id = 'CD'。 str_pad(($reference_id+1), 6, "0", STR_PAD_LEFT);

【讨论】:

    【解决方案2】:

    假设,如果您在其中一个变量中获得了 CD000004。说 $var

    所以, $var = 'CD000004'; $with_cd_var = substr($var, 2) + 1;

    $final_val = 'CD'.str_pad($with_cd_var, 6, '0', STR_PAD_LEFT);

    $final_val 包含字符串“CD000005”

    【讨论】:

      【解决方案3】:

      你必须使用Mysql LPAD()函数:

      SELECT LPAD( '8' , 6, '0');
        --> returns "000008"
      

      【讨论】:

        【解决方案4】:

        考虑以下

        mysql> create table test (val varchar(100));
        Query OK, 0 rows affected (0.11 sec)
        mysql> insert into test values ('CD000001'),('CD000002'),('CD000003'),('CD000004');
        Query OK, 4 rows affected (0.03 sec)
        Records: 4  Duplicates: 0  Warnings: 0
        
        mysql> select * from test ;
        +----------+
        | val      |
        +----------+
        | CD000001 |
        | CD000002 |
        | CD000003 |
        | CD000004 |
        +----------+
        4 rows in set (0.00 sec)
        

        现在要获取最后一条记录,您可以使用以下技术

        select * from test 
        order by cast( substring_index(val,'CD',-1) as unsigned) desc limit 1 ;
        
        +----------+
        | val      |
        +----------+
        | CD000004 |
        +----------+
        
        1 row in set (0.00 sec)
        

        现在在选择时您可以获得值 - 'CD'

        mysql> select substring_index(val,'CD',-1) as val 
        from test order by cast( substring_index(val,'CD',-1) as unsigned) desc limit 1 ;
        +--------+
        | val    |
        +--------+
        | 000004 |
        +--------+
        1 row in set (0.00 sec)
        

        【讨论】:

          【解决方案5】:

          使用 PHP 的 str_pad 函数。举个例子:

          $next_record = 'CD'. str_pad($last_auto_increment_id, 6, "0", STR_PAD_LEFT);
          

          【讨论】:

            猜你喜欢
            • 2013-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-25
            相关资源
            最近更新 更多