ここから本文です

「00001」から連番で登録したいです。 PHPとPostgreSQLを使用しています。

pap********さん

2017/4/1117:55:03

「00001」から連番で登録したいです。
PHPとPostgreSQLを使用しています。

登録ページを作っているのですが、登録作業の際、
とあるテーブルの列(varchar)を 00001 から被りなしで連番で登録したいです。

(例)
00001
00002
00003

初心者なりに考えたのですが、

SELECT文で現在登録されている列を取得後、左側の0を取り払い、最大値を表示。
最大値+1に五桁になるよう0をつけて登録。
値が存在しない場合は00001。

と、考えてみたのですが、より良い方法はありますでしょうか?
ご回答いただければ幸いです。
よろしくお願いいたします。

閲覧数:
88
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

2017/4/1118:24:30

serial型(MySQLでいうところのauto_increment、MSSQLServerではidentity)にすれば万事解決なのに・・・。他のテーブルとの関連次第ですが、基本的に読込むときにフォーマットすればいいと思いますけどね。

どうしてもvarcharでないとダメなら、別テーブル(serial型のカラムだけ)にinsertして、その値をフォーマットして使えばいいと思います。

質問した人からのコメント

2017/4/12 09:40:03

ご回答ありがとうございました。
カテゴリマスター3名からのとても贅沢なご回答を参考に、serialに変更していくよう相談していきたいと思います。
皆さんありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

mpywさん

2017/4/1204:24:27

明らかにvarcharで "00001" と持つのは設計ミスです。serialで持って表示するときにsprintf関数でフォーマットするようにしてください。文字列をプライマリキーにするより整数をプライマリキーにしたほうが速度の面でも圧倒的に有利で、特段の理由がない限りは整数をプライマリキーにするのが常識です。

serialを使えば自動的にPostgreSQLが連番を振ってくれます。

プロフィール画像

カテゴリマスター

nor********さん

2017/4/1120:19:02

問題ありますけど
serial型の列を持ってto_char関数で文字列変換する、必要に応じてファンクション索引を作っておくとか。

ただserial型を使ってもトランザクションがロールバックするようなことがあると連番が飛ぶと思いますが。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる