1

user私のmysqlデータベースで呼び出されたテーブルがあります。自動インクリメントidフィールドとフィールドがありmember_idます。パッケージを選択するための別のラジオボタン。S for standard and P for premium. 選択したパッケージに従って、メンバー ID を最初のID として、P000001または最初のID として設定したいと考えています。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
            ...
            ...

member_id、P または S で正確に 7 の長さになります。

4

3 に答える 3

1

このクエリを使用するだけです

select lpad(member_id,8,'0')
from table
where id = 1
于 2012-05-11T07:05:10.753 に答える
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

于 2012-05-11T03:53:32.633 に答える
0

単純に 2 つのテーブルを使用しないのはなぜですか? 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;

本当にシンプルにしたい場合は、「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;
于 2012-05-11T00:59:49.310 に答える