2017-04-21 10 views
0

私はmysqlの自動インクリメントフィールドの前にテキストを入れたいと思っていますが、 ですが、これを行うにはまだ答えがありません。ここ は、私は、テーブルに挿入する例データをあるmysqlの自動インクリメントフィールドの前にテキストを置く方法(TTT00001など)?

「IDC00000001」

と私はZEROFILLフォーマット、 結果となりましただけで、自動インクリメント整数を何ちょうど00000001

とI番号を自動増分します。その挿入は、いくつかのデータを再度、それはこの "IDC00000002"、 "IDC00000003"、........、 "IDC00000022" など

ように私の質問になりますとき:

解決する方法
  1. この場合?
  2. ストア手順が必要ですか?
  3. これを行うベストプラクティスは、挿入する前にPHPで準備するか、直接mysqlに入れますか?
+2

最初に質問する必要があるのは、「なぜ」、これが必要ですか?単に自動インクリメントの番号を使用し、データを取得するときにその前に「ID」を追加するのはなぜですか? – junkfoodjunkie

+0

PHPを使用していますが、SQL結果を「何でも」(ただし、HTMLの可能性が高い)にすると、シリアライズ時に接頭辞を付けるだけです。自動インクリメントのIDの全体的なポイントは、それが新しいレコード番号ごとに保証されたものであることです。変更しないでください。文字列が必要な場所にのみ追加してください。 –

+0

@junkfoodjunkie私たちが照会したいときに簡単にするために、IDをデータベース内のフロントエンドに表示したい。ありがとうございましたjunkfoodjunkie – bagongpct

答えて

1

トリガーともう1つのテーブルが必要です。以下のトリガーを試してみてください。

DELIMITER $$ 
CREATE TRIGGER tg_tableName_insert 
BEFORE INSERT ON tableName 
FOR EACH ROW 
BEGIN 
    INSERT INTO tableName_seq VALUES (NULL); 
    SET NEW.id = CONCAT('IDC', LPAD(LAST_INSERT_ID(), 8, '0')); 
END$$ 
DELIMITER ; 

シーケンステーブルを作成することを忘れています。あなたはtableNameのテーブルにデータを挿入すると

CREATE TABLE tableName_seq 
(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
); 
CREATE TABLE tableName 
(
    id VARCHAR(11) NOT NULL PRIMARY KEY DEFAULT '0' 
); 

あなたの最初のidがIDC00000001になり、第二IDC00000002はそのようになります。私はそれが助けて欲しい!

+0

なぜこれは複雑にするのですか? PHPで書かれているので、直列化中に 'id'フィールドの前に定数文字列を追加するだけです。 –

+0

彼らは "これを行うのにベストプラクティスは何ですか?私の見解から、その仲間をするのがベストプラクティスです。それは複雑ではありません、私はちょうどすべてのトリガーを書いた。 –

+0

@ Mike'Pomax'Kamermansあなたのアドバイスありがとう – bagongpct

関連する問題