Php 自定义类型自动增量id代码点火器

Php 自定义类型自动增量id代码点火器,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的mysql数据库中有一个名为user的表。我有一个自动递增的id字段和一个member\u id字段。和另一个单选按钮选择包S表示标准,P表示高级。我想根据所选的包为第一个id设置我的会员id为P000001或S000001 For example if the first member choose P his member_id will be P000001 if the second member choose S his member_id will be

我的mysql数据库中有一个名为
user
的表。我有一个自动递增的
id
字段和一个
member\u id
字段。和另一个单选按钮选择包<代码>S表示标准,P表示高级。我想根据所选的包为第一个id设置我的会员id为
P000001
S000001

For example if the first member choose P his member_id will be P000001
            if the second member choose S his member_id will be S000002
            if the third member choose S his member_id will be S000003
            ...
            ...

成员id
的长度将精确到7,带有p或S.

为什么不干脆有两个表呢?一个为S成员,一个为P成员。您可以使用零填充ID。如果绝对需要使数字唯一,即您不希望S000001和P000001都存在,请使用另一个表存储唯一ID,并在s和P表中引用它们

比如:

-- Table `ids`
CREATE  TABLE IF NOT EXISTS `ids` (
  `master_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
  `member_type` ENUM('S','P') NULL ,
  PRIMARY KEY (`master_id`) )
ENGINE = InnoDB;


-- Table `s_type`
CREATE  TABLE IF NOT EXISTS `s_type` (
  `s_type_id` INT NOT NULL ,
  `master_id` INT NULL ,
  PRIMARY KEY (`s_type_id`) ,
  INDEX `fk_s_type_1` (`s_type_id` ASC) ,
  CONSTRAINT `fk_s_type_1`
    FOREIGN KEY (`s_type_id` )
    REFERENCES `ids` (`master_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- Table `s_type_copy1`
CREATE  TABLE IF NOT EXISTS `s_type_copy1` (
  `p_type_id` INT NOT NULL ,
  `master_id` INT NULL ,
  PRIMARY KEY (`p_type_id`) ,
  INDEX `fk_s_type_copy1_1` (`p_type_id` ASC) ,
  CONSTRAINT `fk_s_type_copy1_1`
    FOREIGN KEY (`p_type_id` )
    REFERENCES `ids` (`master_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
如果您想变得非常简单,只需将自动递增的id与“S”或“p”的枚举字符(1)结合使用即可。当需要显示时,只需将它们放在一起。CHAR(1)列可用于确定成员资格类型

如果您不打算添加更多的成员资格类型,您甚至可以将TINYINT作为布尔值(0='S',1='p')

……或者

-- Table `ids`
CREATE  TABLE IF NOT EXISTS `ids` (
  `member_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
  `member_type` TINYINT ,
  PRIMARY KEY (`member_id`) )
ENGINE = InnoDB;

为什么不干脆有两张桌子呢?一个为S成员,一个为P成员。您可以使用零填充ID。如果绝对需要使数字唯一,即您不希望S000001和P000001都存在,请使用另一个表存储唯一ID,并在s和P表中引用它们

比如:

-- Table `ids`
CREATE  TABLE IF NOT EXISTS `ids` (
  `master_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
  `member_type` ENUM('S','P') NULL ,
  PRIMARY KEY (`master_id`) )
ENGINE = InnoDB;


-- Table `s_type`
CREATE  TABLE IF NOT EXISTS `s_type` (
  `s_type_id` INT NOT NULL ,
  `master_id` INT NULL ,
  PRIMARY KEY (`s_type_id`) ,
  INDEX `fk_s_type_1` (`s_type_id` ASC) ,
  CONSTRAINT `fk_s_type_1`
    FOREIGN KEY (`s_type_id` )
    REFERENCES `ids` (`master_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- Table `s_type_copy1`
CREATE  TABLE IF NOT EXISTS `s_type_copy1` (
  `p_type_id` INT NOT NULL ,
  `master_id` INT NULL ,
  PRIMARY KEY (`p_type_id`) ,
  INDEX `fk_s_type_copy1_1` (`p_type_id` ASC) ,
  CONSTRAINT `fk_s_type_copy1_1`
    FOREIGN KEY (`p_type_id` )
    REFERENCES `ids` (`master_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
如果您想变得非常简单,只需将自动递增的id与“S”或“p”的枚举字符(1)结合使用即可。当需要显示时,只需将它们放在一起。CHAR(1)列可用于确定成员资格类型

如果您不打算添加更多的成员资格类型,您甚至可以将TINYINT作为布尔值(0='S',1='p')

……或者

-- Table `ids`
CREATE  TABLE IF NOT EXISTS `ids` (
  `member_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
  `member_type` TINYINT ,
  PRIMARY KEY (`member_id`) )
ENGINE = InnoDB;
这个怎么样

假设你有10个人是高级的,8个人是标准的

新用户加入标准帐户

function add_user($account_type)
{
   $count = query->result(SELECT COUNT(*) WHERE `member_id` LIKE '$account_type_%');

   $count = $count+1;

   convert count into 7 characters;
   $count = $account_type.$count;
   insert into database;
}
LIKE是匹配部分结果的SQL查询,而%则充当通配符

source=

这个怎么样

假设你有10个人是高级的,8个人是标准的

新用户加入标准帐户

function add_user($account_type)
{
   $count = query->result(SELECT COUNT(*) WHERE `member_id` LIKE '$account_type_%');

   $count = $count+1;

   convert count into 7 characters;
   $count = $account_type.$count;
   insert into database;
}
LIKE是匹配部分结果的SQL查询,而%则充当通配符


source=

您只需使用此查询即可

select lpad(member_id,8,'0')
from table
where id = 1

您可以简单地使用这个查询

select lpad(member_id,8,'0')
from table
where id = 1

我认为这将使我的工作更加复杂,对cmnt来说是如此。我的意图是使用单个表格来完成这项工作。我认为这将使我的工作更加复杂,对cmnt来说是如此。我的意图是使用单个表格来完成这项工作。这里是一个简单的答案这里是一个简单的答案