• 締切済み

【MySQL】auto_incrementの値を他のカラムにも入れたい

MySQL初心者です。 以下のようなテーブルを作ろうかと考えています(PHP経由) ====================== id   filename 1    1.jpg 2    2.jpg   ・・・ ====================== 要はオートインクリメントで得たidを別のカラムでも活用したいのです。 とりあえず考えたのは、 1) insert で id を書き込む 2) last_insert_id() で id を得て update で filename を書き込む・・・ といったところですが、2段階作業というのが気になります。 「一発で」できる方法があるならそうしたいのですが無理でしょうか。 「無理」という回答でも結構です。 お詳しい方、よろしくお願いいたします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

filenameを書き込む必要ないのでは? SELECT concat(id,'.jpg') as filename FROM `hoge`

ikataro
質問者

お礼

あ! filenameカラム自体いらないってことですか。 なるほどいらないですね・・・ 根本的なご指摘ありがとうございました。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

サブクエリを使うにしても、insert対象のtableをselect文の対象に出来ないので、先にデータ取得するか、後から取得か、いずれにしてもSQL文2行は必要。 いちいちfetchが要らない方法としては、変数を使う方法がある $sql1 = "set @a = (select max(id) from `tablename`) "; $sql2 = "insert into `tablename` set `filename`= concat( @a:=@a+1 , '.gif')"; phpの mysql_query() では、1行ずつSQL文を発行しなければならないが、続けて発行するだけですむ。 前方から順に@aに1ずつ足していくので、以下のように複数行を一度にinsertも可能。 $sql2 = "insert into `tablename` ( `filename` ) values( concat(@a:=@a+1,'.gif') ) , ( concat(@a:=@a+1,'.gif') ) , ( concat(@a:=@a+1,'.gif') )": この場合も $sql1を発行してから、$sql2を発行する。

ikataro
質問者

お礼

なるほどいずれにしても2行必要ですね。 ありがとうございました。

回答No.1

INSERT前に、AUTO_INCREMENTでわりあてられる値を事前に調べておくとか。 参考: http://okwave.jp/qa1727794.html

ikataro
質問者

お礼

なかなか1発でできる方法はないですね。 ありがとうございました。

関連するQ&A