2016-09-28 15 views
0

どのような方法が良いでしょうか?あるいは、最初に挿入されたAB00001などのフィールドをPHP + SQLでAB00000の形式にするにはどうすればよいですか?私はPHP + SQLでフォームを作成し、列の1つが "reference_nr"であり、私の全体のコードが既にID(AutoIncrement)を使って作成されているため、それを使用することはできませんそのテーブル。PHPのオートインクリメント値

私が必要とするのは、最後に使用されたものを別の別のテーブルに書き込むもので、フォームのテーブルにINSERTする前に、最後の値とインクリメント+1を選択し、その演算の結果をINSERTします。

  • 別のテーブルが必要ですか、フォームのテーブルから直接選択できますか?
  • 2人で同時に フォームを挿入しようとすると問題が起こると思いますか?

    私は以下のあなたのリンク元ページの例と同様SQL関数LAST_INSERT_ID()を使用します。

+2

はたぶん標準の自動インクリメント列を使用し、この値を使用しますバッキングストレージではなく、識別子の* display *を与えられた接頭辞で指定された幅にフォーマットするだけですか? – David

+0

または、2つのクエリを使用します。1)DB内のユーザーをINSERTして、ID($ mysqli-> insert_id)を取得します。 2)IDに基づいて正しいAB00をユーザーに提供するようにユーザーを更新します。 – verjas

+0

mysqlは平易な整数の自動インクリメント値しか作成できません。複合値/文字列は作成されません。ポストインサートトリガを使用して、テーブルの他のフィールドの合成値を作成する必要があります。 –

答えて

0

をあなたの問題はのための自動インクリメント値を取得する方法である場合接頭辞がAB00000のような文字列で、自動インクリメントフィールドは数字のみです。フィールドは固定フォーマットを持っている場合 はあなたからid値を使用して、プレーンのインサートを作成することができます。

SELECT CONCAT('AB', LPAD(MAX(SUBSTRING(id,3)+1 ,5,'0') from table 

とトランザクションの問題を避けるために、あなたのインサートに直接

1

SQLはすでにそれとすることをもたらします。テーブルfooが自動インクリメントフィールド "ID" を持っていると仮定しましょう:

INSERT INTO 
    foo (auto, text, somevalue) 
VALUES 
    (NULL,'text', 2);   # id was generated hoer 

その後、あなたは:

UPDATE 
    foo 
SET 
    somevalue = somevalue + 1 
WHERE 
    id = LAST_INSERT_ID() 

出典:http://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html

関連する問題