Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每个用户类型的起始编号不同_Php_Mysql_Sql - Fatal编程技术网

Php 每个用户类型的起始编号不同

Php 每个用户类型的起始编号不同,php,mysql,sql,Php,Mysql,Sql,我正在建立一个网站,将有多个用户类型的数据库 管理 大学生 教师 我希望每种类型的用户ID以一个特定的数字开始,然后在新用户注册时自动递增 比如说 第一个管理员ID应该是01 第十个学生ID 110 第100位教师2100 在MySQL中如何实现这一点?您可以使用窗口函数: select u.*, row_number() over(partition by user_type order by id) + case user_type when 'Admin'

我正在建立一个网站,将有多个用户类型的数据库

管理 大学生 教师 我希望每种类型的用户ID以一个特定的数字开始,然后在新用户注册时自动递增

比如说

第一个管理员ID应该是01 第十个学生ID 110 第100位教师2100
在MySQL中如何实现这一点?

您可以使用窗口函数:

select
    u.*,
    row_number() over(partition by user_type order by id) + case user_type
        when 'Admin'   then 0
        when 'Student' then 99
        when 'Teacher' then 1999
    end as new_id
from users

这假定列id是表的主键。我不建议存储这些信息,这些信息可以如上所示动态计算。如果您打算定期使用此功能,可以创建一个视图。

您可能应该将学生、管理员和教师存储在不同的表中。据推测,它们在您的数据模型中是不同的实体-例如,学生上课,但老师教他们

然后,如果确实需要,可以在每个表中将自动增量值设置为不同的起始值

如果您只是为在线访问注册用户,并且您的数据模型与学校的运营无关,则只需使用自动递增的id。我强烈建议不要在id中编码其他信息。该信息可在表的“类型”列中找到

如果确实需要表示不同组的ID,可以添加一个计算列。我建议为此使用字符串:

alter table users add typed_user_id as
    (concat(left(user_type, 1), lpad(user_id, 4, '0'))

让它更容易、更可能地帮助您:。不要给id赋予太多意义:它只是标识一行,仅此而已,请使用名为example type的列,并将0、1或2放在其中。如果必须将此作为用户代码的一部分?然后将id和类型连接在一起,但仅在表示层中