2012-05-11 19 views
1

私はmysqlデータベースにuserというテーブルを持っています。私は自動増分idフィールドとmember_idフィールドを持っています。パッケージを選択するための別のラジオボタンがあります。 S for standard and P for premium。私は選択されたパッケージに応じて最初のidのメンバーIDをP000001またはS000001に設定したいと思います。単に2つのテーブルを持っていないのはなぜカスタムタイプの自動インクリメント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

+0

は単純な答えである http://stackoverflow.com/questions/611340/how-can-i-set- autoincrement-format-to-0001-in-mysql –

答えて

1

あなたは、単にこのクエリを使用することができます。ここ

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

で長さ7正確になりますか? 1人はSメンバー、もう1人は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; 

あなたは、本当のシンプル行くだけ「S」または「P」のために列挙されたCHAR(1)と連動して自動インクリメントのIDを使用したい場合。あなたが表示する必要があるときにそれらをまとめておく必要があります。 CHAR(1)列は、メンバーシップ・タイプを判別するために使用できます。

さらにメンバーシップタイプを追加する予定がない場合は、ブール値(0 = 'S'、1 = 'P')としてTINYINTを使用することもできます。これについて

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

私はそれが自分の仕事をより複雑にしてくれると思っています。 –

+1

私の意図は、これを行うには単一のテーブルを使用することです。 –

0

方法。

プレミアムで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クエリですが、%はワイルドカードとして機能します。

ソース= http://www.techonthenet.com/sql/like.php

関連する問題