自定义类型自动增量id codeigniter

时间:2012-05-11 00:55:13

标签: php mysql codeigniter

我的mysql数据库中有一个名为user的表。我有一个自动增量id字段和一个member_id字段。和另一个选择包的单选按钮。 S for standard and P for premium。我想根据所选的包将我的会员ID设置为P000001S000001作为第一个ID。

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
            ...
            ...

member_id的长度与P或S完全相同。

3 个答案:

答案 0 :(得分:1)

您可以简单地使用此查询

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

答案 1 :(得分:0)

为什么不简单地有两张桌子?一个用于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和一个枚举的CHAR(1)来表示'S'或'P'。您只需要在需要显示时将它们放在一起。 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` ENUM('S','P') NULL ,
  PRIMARY KEY (`member_id`) )
ENGINE = InnoDB;

...或...

-- 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;

答案 2 :(得分:0)

这个怎么样。

假设您有10人使用Premium,8人使用Standard。

新人加入标准帐户。

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 = http://www.techonthenet.com/sql/like.php