首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定制在PHP、MySql中生成的唯一Id

问定制在PHP、MySql中生成的唯一Id
EN

Stack Overflow用户
提问于 2015-02-21 16:55:07
回答 2查看 1.8K关注 0票数 0

我希望在创建自动但自定义的id为我在mysql数据库中存储的每个项目提供一点帮助。例如,如果我输入1条pepe牛仔裤颜色为“黑色”,腰围为30。此产品的唯一id将是PEPE+BLACK+30+A001,A001是一个唯一的数字,在达到A999后将像A001、A002、A003....A999一样递增。此数字将变为B001,然后是B002、B003....so。请告诉我这样做的逻辑。

1项id的示例为: PEPEBLACK30A009

#谢谢:)

EN

回答 2

Stack Overflow用户

发布于 2015-02-21 17:21:16

你可以拥有这样的东西:

代码语言:javascript
复制
$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之后,这将打印其他符号,因此它可能需要一些that。

票数 1
EN

Stack Overflow用户

发布于 2015-02-21 17:14:33

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

转换后的几个ID示例:

代码语言:javascript
复制
<?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";
}

输出:

代码语言:javascript
复制
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个或更多的数字,或者在将来添加更多的字母。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28643921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档