プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

PHP&MySQLでプログラムを勉強しています。

データを挿入する際にデータに連番を振ろうと思っています。その際に連番を1 2 3 4・・・というような連番ではなく、

hametome0000001
hametome0000002
hametome0000003




といったような(文字列+数列)連番にしたいと思っているのですが、MySQLのデータ型をauto incrementにして連番を振る場合では文字列+数列の連番が振れないようなので、どのようにすれば文字列+数列の連番を振れるのか分かりません。

よろしくご教授のほど、お願いいたします。

A 回答 (3件)

トランザクションの問題がありますが



+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(8) | NO | PRI | NULL | auto_increment |
| id_name | varchar(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+

のようなテーブルで説明しますと
insert into test values (NULL,concat('hogehoge',last_insert_id()+1));
これでいけるかとおもいます。

同一SQL文内で インサート時の id が取れないので
直近で insertされた id + 1 を取得してインサートしています。

下記の解答の様に
insert into test values (NULL,'hogehoge');
とやったあとに
update test set id_name=concat('hogehoge',lpad(last_insert_id(),2,0)) where id = last_insert_id()
でもいいかと思います。
    • good
    • 0
この回答へのお礼

お礼が遅れまして申し訳ありません。お教え頂きました方法で実現できました。

下の方の方法と合わせてどちらがよいのか色々と調べてみたいと思います。ありがとうございました。

お礼日時:2009/07/09 13:05

<?php


$sql = 'insert文';
mysql_query($sql); //成功したとして
$id = mysql_insert_id(); //直近のインサートされたIDを取得できます。
$str_id = sprintf("hametome%07d", $id);

$sql = 'update文';
mysql_query($sql); //ここで生成したIDを入力するフィールドにUPDATE。

?>

といった流れで一応出来ますが、もっと良いやり方があるかもしれませんね。
    • good
    • 0
この回答へのお礼

お礼が遅くなりまして、申し訳ありません。

お教え頂いた方法で実現できました。ありがとうございます。

お礼日時:2009/07/09 13:04

MySQLの機能にないのであれば、PHPで処理するしかないですね。

この回答への補足

ご回答頂きまして、ありがとうございます。

>MySQLの機能にないのであれば、PHPで処理するしかないですね。

はい。それは分かっているのですが、そのやり方がいまいち不明でして。よろしくご教授のほど、お願いいたします。

補足日時:2009/07/07 17:41
    • good
    • 0

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