アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQL初心者です。
以下のようなテーブルを作ろうかと考えています(PHP経由)
======================
id   filename
1    1.jpg
2    2.jpg
  ・・・
======================
要はオートインクリメントで得たidを別のカラムでも活用したいのです。

とりあえず考えたのは、

1) insert で id を書き込む
2) last_insert_id() で id を得て update で filename を書き込む・・・

といったところですが、2段階作業というのが気になります。
「一発で」できる方法があるならそうしたいのですが無理でしょうか。

「無理」という回答でも結構です。
お詳しい方、よろしくお願いいたします。

A 回答 (3件)

INSERT前に、AUTO_INCREMENTでわりあてられる値を事前に調べておくとか。



参考:
http://okwave.jp/qa1727794.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/19 01:03

サブクエリを使うにしても、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を発行する。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/05/19 01:04

filenameを書き込む必要ないのでは?



SELECT concat(id,'.jpg') as filename FROM `hoge`
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/05/19 01:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す