mysql—每次使用php在sql数据库中插入新行时生成一个自定义的唯一id

ekqde3dh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(249)

我所拥有的
所以我有一个表,有3列(它实际上有很多,但举例来说)让我们说 id , name 以及 email . 我有一个用户进入的网页 name 以及 email 在php中使用mysqli,它被保存到mysql数据库中, id 由php使用自动增量生成,所以它类似于1,2,3。。。等等。
我想要什么
我不希望id只是一个整数,我希望它是字母和数字的组合, eg.- B201 . 我想定义在哪种情况下使用哪个字母的规则,我可能还想自己定义数字的一部分,它的一部分将自动递增。
假设用户输入的邮件是gmail邮件,那么我希望第一个字符是g,如果是yahoo,则是y等等。 eg.- G201,Y201 .
现在我想用第一个和第二个数字来表示月份,如果是nov,那么id应该是 G111 .
最后一个数字应该为每个新条目自动递增。
我在google上找了一些有用的东西,但是找不到任何好的东西(也许我的google技术很糟糕)。
我被困的地方
在php中决定前三个字符非常简单,我可以检查用户发布的电子邮件字符串并决定第一个字母,对于下一个数字,我可以检查当前日期时间并按当前月份决定。
真正的问题是最后一部分,它是自动递增的,我不知道怎么做。php脚本在插入新行时如何知道上次插入的值是多少,这样就可以在这次的自动增量值中添加+1。
所以如果有人能帮我用php生成一个类似的字符串,这样我就可以把它保存在数据库中,我会非常感激的。

emeijp43

emeijp431#

好吧,您可以使用mysqli last insert id,而不是自己生成整数:

// Note: you must call the mysqli_insert_id()
// function  after the insert query

$generate_id = mysqli_insert_id( $connection );

// Get the first character from the email server
// gmail.com will be: G
// yahoo.com will be: Y
// and so on...
$generate_char = strtoupper( explode( '@', $email_here)[ 1 ][ 0 ] );

// Concatenate the generated values
$unique_id = $generate_char . $generate_id;

就这样。
请注意,字符串可以作为数组进行操作,例如:

$str = 'gmail.com';

要得到第一个字母:g,可以使用如下数组表示法:

$first_letter = $str[ 0 ];

相关问题