• ベストアンサー

PHP&MySQLでの文字列+数列の一意の連番を生成するには?

お世話になります。 PHP&MySQLでプログラムを勉強しています。 データを挿入する際にデータに連番を振ろうと思っています。その際に連番を1 2 3 4・・・というような連番ではなく、 hametome0000001 hametome0000002 hametome0000003 ・ ・ ・ ・ といったような(文字列+数列)連番にしたいと思っているのですが、MySQLのデータ型をauto incrementにして連番を振る場合では文字列+数列の連番が振れないようなので、どのようにすれば文字列+数列の連番を振れるのか分かりません。 よろしくご教授のほど、お願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
noname#90314
noname#90314
回答No.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() でもいいかと思います。

hametome
質問者

お礼

お礼が遅れまして申し訳ありません。お教え頂きました方法で実現できました。 下の方の方法と合わせてどちらがよいのか色々と調べてみたいと思います。ありがとうございました。

その他の回答 (2)

回答No.2

<?php $sql = 'insert文'; mysql_query($sql); //成功したとして $id = mysql_insert_id(); //直近のインサートされたIDを取得できます。 $str_id = sprintf("hametome%07d", $id); $sql = 'update文'; mysql_query($sql); //ここで生成したIDを入力するフィールドにUPDATE。 ?> といった流れで一応出来ますが、もっと良いやり方があるかもしれませんね。

hametome
質問者

お礼

お礼が遅くなりまして、申し訳ありません。 お教え頂いた方法で実現できました。ありがとうございます。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

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

hametome
質問者

補足

ご回答頂きまして、ありがとうございます。 >MySQLの機能にないのであれば、PHPで処理するしかないですね。 はい。それは分かっているのですが、そのやり方がいまいち不明でして。よろしくご教授のほど、お願いいたします。

関連するQ&A

  • 【PHP,MySQL】連番の付け方について

    連番を下記の様に付けたいのですが、どなたかご教授ください。 参考になるURLでも結構です。 【環境】 ・MySQL バージョン: 5.1.41 ・PHP バージョン: 5.3.1 【現状】 ○親テーブル:nou_itiran ・entry_id [int(11)][auto_increment]主 ・その他カラム ○子テーブル:nou_ko ・ko_id [int(11)][auto_increment]主 ・entry_id [int(11)]←親テーブルの主キー値が入る ・その他カラム 2つのテーブルを作成しています。 親テーブルのカラム[entry_id]に対して、子テーブルの[ko_id]に 副番号をつけたいのですが、考え方がまとまりません。 現在は、 [親entry_id]/[子ko_id] 456/1 456/2 457/3 457/4 458/5 458/6 459/7 ・ ・ のように、[親entry_id]と[子ko_id]は個々に連番が発生します。 *********** 【達成したい内容】 456/1 456/2----★ 457/1 457/2----★ 458/1 458/2 459/3----★ [親entry_id]に対して、何番まで使われたか(★)を他のテーブルで 保持しておけばよいのかも??と思うのですが、 具体的な手法がわかりません。 ************* MySQLへのセレクト、インサートはPHPから行っております。 宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHP MySQL自動連番で削除された場合

    PHPとMySQLでサイトを作っています。 ページングしたページで”次へ”と言うリンクをpidに+1と言う形で実装してるのですが もしデータを削除して自動連番の値が中抜けしてしまった場合そのリンクが無効って事になってしまいます。 アクセスされる度にオートインクリメントの番号を振り直すみたいな事とか出来るんでしょうか? 連番削除で中抜けが出来てしまうのは回避出来ないでしょうか? それともPHPのプログラミングで上手に回避出来る方法があれば教えて下さい。 知恵を貸して下さい。 お願いします。

    • ベストアンサー
    • PHP
  • MySQLへの特殊文字の挿入について

    こんばんは。今MySQLへのデータの挿入時に特殊文字を挿入することが出来ないエラーに悩まされています。初心者で大変申し訳ございませんが、色々と調べてみたのですがどうしても解決できなかった為、質問させて頂きました。お手数をおかけしますがご教授いただければ幸いです。 問題というのは、MySQLへのデータの挿入時の文字列に特殊文字が含まれていた場合、この場合文字列中に「?」が含まれていた場合にこの文字列をinsertすると「?」が「1」に変換されてしまうのです。環境としてはPHPのPEARからの利用で、文字列はDBクラスのquoteメソッドでエスケープしてから挿入しております。文字列の文字コードはEUC-JPです。バックアップ用ファイル(CSV形式のテキストファイル)には正しく記録されておりますのでMySQLの仕様に関しての問題ではないかとは考えておりますが、どうしても解決できず困っております。お手数をおかけしますがよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • PHPでMySQLに格納したファイルをダウンロードしたいです。

    MySQLサーバに格納したファイルをPHPを使ってブラウザからファイルをダウンロードするプログラムを作りたいのですが、やり方が分からず困っています。方法もしくは簡単なスクリプトを教えてください。お願いします。 PHPを使ってブラウザからMySQLに画像やファイルをアップロードできたのですが、取り出す方法が分かりません。バイナリデータを取り出してimage srcを用い、ブラウザに画像を表示するまではできました。 テーブルは create table image( ID int not null primary key auto_increment, data MEDIUMBLOB); で作成しています。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPとMySQLで自動取得

    PHPとMySQLでブログを改造しています。今作りたいのはブログの記事を投稿する度にPHPでMySQLにアクセスして文字列を呼び出すというものです。 [例] MySQLのテーブルのカラム1には連番の数字(1~)がはいっていて、カラム2には呼び出したい文字列がはいっています。ちなみに15件のデータがはいっているとします。それで記事を投稿するたびに上から順番に5件ずつ表示したいんです。それで一周したらまた最初からというのが希望です。 どうソースコードを書いていいのか解りません。解る方がいましたら、教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • mysqlで長さ無制限の文字列を格納することはできますか?

    mysqlを用いて掲示板を作りたいです。その際に、簡素化のため、掲示板の全てのデータをmysqlに格納したいと思っています。 また、掲示板における本文の部分は、文字列の長さを無制限にするのが妥当だと思います。 しかし、mysqlのマニュアル(http://dev.mysql.com/doc/mysql/ja/BLOB.html)によると、一番大きい型であるLONGBLOB型の記憶容量は 2^32バイトとなっており、それを超える文字列は切り捨てられるとなっています。 そこで、ご教授いただきたいです。 長さ無制限の文字列をmysqlに格納する方法はありますか?そしてその場合はどうすればよいですか? それとも、長さ無制限の文字列をmysqlに格納する方法ははなく、その場合は別ファイルを用意し、そちらに書き込むなどをする必要がありますか? どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 文字列を数列に変換

    文字列(アルファベットのみ)を数列に変換するプログラムを作りたいのですが、うまくいきません。 [A = 01、B = 02、~ Z = 26、 Space = 00]とし、例えば入力が「ADAM」であれば、出力は「01040113」となるようなプログラムです。A~Z以外の文字(!, ?, @, 1, 2など)は無視します。 ちなみに言語はJavaです。 誰かご教授いただけないでしょうか?

    • ベストアンサー
    • Java
  • オートコンプリート PHP MySQL

    オートコンプリート PHP MySQL お世話になります。PHP初心者です。 PHPとMySQLでHomepageを作成中ですが、 テキスト入力時オートコンプリート機能を実装したいですが、 リストはMySQLの列を参照するようにしたいですが、 教えていただけないでしょうか? 参考になるようなサンプル、HPでも教えていただけないでしょうか? よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP 文字列抽出

    はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕  あいaうえおか(23バイト)       ↓(substrにより10バイトを抽出して末尾に…を追加)  あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示しないようにプログラミングをしたいのですが、 どのように組めばよいかわかりません。 非常に初歩的なご質問で恐縮ですがご教授頂けると ありがたく思います。 どうぞよろしくお願い致します。

    • 締切済み
    • PHP