2012-05-11 1 views
1

J'ai une table appelée user dans ma base de données mysql. J'ai un champ auto-incrémenté id et un champ member_id. et un autre bouton radio pour choisir le paquet. S for standard and P for premium. Je veux définir mon ID de membre comme P000001 ou S000001 pour le premier identifiant en fonction du package choisi.Numéro d'identification d'incrémentation automatique de type personnalisé

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

Le member_id sera exactement 7 en longueur avec P ou S.

+0

Voici une réponse simple http://stackoverflow.com/questions/611340/how-can-i-set- autoincrement-format-to-0001-in-mysql –

Répondre

1

Vous pouvez simplement utiliser cette requête

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

Pourquoi pas seulement deux tableaux? Un pour les membres S et un pour les membres P. Vous pouvez utiliser des identifiants remplis de zéro. S'il est absolument nécessaire que les numéros soient uniques, c'est-à-dire que vous ne voulez pas que S000001 et P000001 existent, utilisez une autre table pour stocker les identifiants uniques et les référencer dans vos tables S et P.

Quelque chose comme:

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

Si vous voulez aller très simple, il suffit d'utiliser un identifiant auto-incrémentée en liaison avec un CHAR dénombrée (1) pour 'S' ou 'P'. Vous avez juste besoin de les assembler lorsque vous avez besoin d'afficher. La colonne CHAR (1) peut être utilisée pour déterminer le type d'appartenance.

Si vous ne prévoyez pas d'ajouter d'autres types d'appartenances, vous pouvez même utiliser un TINYINT comme un booléen (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; 

... ou ...

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

Je pense que cela rendra mon travail plus complexe, BTW merci pour le cmnt. –

+1

Mon intention est d'utiliser une seule table pour ce faire. –

0

Comment à ce sujet.

Disons que vous avez 10 personnes avec Premium et 8 personnes avec Standard.

Une nouvelle personne vient rejoindre un compte standard. LIKE est une requête SQL pour correspondre à un résultat partiel, tandis que% agit en tant que caractère générique.

source = http://www.techonthenet.com/sql/like.php