【问题标题】:Customise Unique Id generate in PHP , MySql在 PHP、MySql 中生成自定义唯一 ID
【发布时间】:2015-02-21 08:55:06
【问题描述】:

在为我存储在 mysql 数据库中的每个项目创建自动但自定义的 ID 时,我几乎不需要帮助。就像我输入 1 件 pepe 牛仔裤颜色“黑色”和腰围 30。该产品的唯一 ID 将是 PEPE+BLACK+30+A001,A001 是一个唯一编号,它将像 A001、A002、A003 一样增加... .A999 到达 A999 后,这个数字会变成 B001,然后是 B002,B003....等等。请告诉我这样做的逻辑。

1 个商品 ID 的示例为:PEPEBLACK30A009

#谢谢 :)

【问题讨论】:

  • 如果您已经有 A001-A999,那么下一个数字 A201 是什么?
  • 这是主要问题,我如何通过编码来做到这一点。
  • 我的意思是您已经在初始数据集(A001 到 A999)中使用了 A201
  • Opps,我很抱歉这是一个打字错误,它会变成 B001 等等
  • 如果最终代码中的实体被分隔,例如用破折号,则更容易定位最终实体,从而增加它的数字索引。

标签: php mysql unique-id


【解决方案1】:

你可以有这样的东西:

$lastId = 'A999';
$letter = $lastId[0];
echo $letter;
$number = $lastId[1].$lastId[2].$lastId[3];
echo $number;

if ($number < 999) {
    $newId = $letter.sprintf("%03d", $number+1);
} else {
    $ascii = ord($letter);
    $newLetter = chr($ascii+1);
    $newId = $newLetter.'001';
}

echo $newId;

请记住,在字符 Z 之后,这将打印其他符号,因此可能需要一些调整。

【讨论】:

    【解决方案2】:

    创建一个自动递增的主 ID 列 (0 - 28971),然后您可以获取此 ID 号并将其转换为您的格式。

    几个ID转换的例子:

    <?php
    
    for ($i = 0; $i < 5000; $i += 99) {
        $num     = $i;
        $letters = range('A', 'Z');
        $letter  = (int) $num / 999;
        $num     = $num % 999 + 1;
        $num     = str_pad($num, 3, 0, STR_PAD_LEFT);
        echo $i . ' => ' . $letters[$letter] . $num . "\n";
    }
    

    输出:

    0 => A001
    99 => A100
    198 => A199
    297 => A298
    396 => A397
    495 => A496
    594 => A595
    693 => A694
    792 => A793
    891 => A892
    990 => A991
    1089 => B091
    1188 => B190
    1287 => B289
    1386 => B388
    1485 => B487
    1584 => B586
    1683 => B685
    1782 => B784
    1881 => B883
    1980 => B982
    2079 => C082
    2178 => C181
    2277 => C280
    2376 => C379
    2475 => C478
    2574 => C577
    2673 => C676
    2772 => C775
    2871 => C874
    2970 => C973
    

    Rest

    一个问题当然是主键的限制为 28971,因为只有 26 个字母 (26 * 999),但当然你可以有 4 个或更多数字,或者将来添加更多字母。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2011-06-20
      • 2020-12-06
      • 2010-11-30
      • 2016-09-27
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多