- ベストアンサー
【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から行っております。 宜しくお願いいたします。
- m_toma
- お礼率100% (9/9)
- MySQL
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
つい先日も同じような質問に回答を入れているんですが・・・ こんな感じでよいですか? select (select count(*)+1 from nou_ko as ko2 where ko2.entry_id=ko1.entry_id and ko2.ko_id<ko1.ko_id) rank ,ko_id,entry_id from nou_ko as ko1 ちなみに質問の命題がまちがっています。 458/1 458/2 459/3----★ これは 458/1 458/2 458/3----★ ですよね? そうでなければロジックが意味不明
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
ストレージエンジンがMyISAMでいいなら、 auto_increment を primary keyの2番目の構成列とすることで、MySQL側に管理を任せられます。 http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html
お礼
ご回答ありがとうございました。 達成できました。
関連するQ&A
- PHP/MySQL INSERT文について。
PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。
- ベストアンサー
- MySQL
- PHP&MySQLでの文字列+数列の一意の連番を生成するには?
お世話になります。 PHP&MySQLでプログラムを勉強しています。 データを挿入する際にデータに連番を振ろうと思っています。その際に連番を1 2 3 4・・・というような連番ではなく、 hametome0000001 hametome0000002 hametome0000003 ・ ・ ・ ・ といったような(文字列+数列)連番にしたいと思っているのですが、MySQLのデータ型をauto incrementにして連番を振る場合では文字列+数列の連番が振れないようなので、どのようにすれば文字列+数列の連番を振れるのか分かりません。 よろしくご教授のほど、お願いいたします。
- ベストアンサー
- PHP
- mysqlで部分的にオートインクリメントしたい
mysqlを使用しております。 下記のようなテーブルを作りたいと思っているのですが、 親通し番号が同じ行についてのみ1からオートインクリメントすることは出来るのでしょうか? どなたかアドバイス頂ければと思います。 -------------------------------------------------------------------------------------- column1:親番号 column2:子通し番号 ・ ・ ・ column1:1 column2:1 ←カラム1が同じ値のとき、カラム2はinsertされた順に増えていく column1:1 column2:2 column1:1 column2:3 column1:2 column2:1 ←カラム1が増えたとき、カラム2は1に戻りインクリメントされていく。 column1:2 column2:2 column1:2 column2:3
- ベストアンサー
- MySQL
- PHP MySQL自動連番で削除された場合
PHPとMySQLでサイトを作っています。 ページングしたページで”次へ”と言うリンクをpidに+1と言う形で実装してるのですが もしデータを削除して自動連番の値が中抜けしてしまった場合そのリンクが無効って事になってしまいます。 アクセスされる度にオートインクリメントの番号を振り直すみたいな事とか出来るんでしょうか? 連番削除で中抜けが出来てしまうのは回避出来ないでしょうか? それともPHPのプログラミングで上手に回避出来る方法があれば教えて下さい。 知恵を貸して下さい。 お願いします。
- ベストアンサー
- PHP
- カラム名でseqとidではどちらがふさわしいのでしょうか?
mysql5.1.33を使用しています。 例えば、ユーザ情報を格納するuserテーブルがあって ユーザが決める半角英数字からなるIDを格納するuser_idカラムがあるとします。 そしてAuto Incrementなカラムも付け足すと、 [user] seq INT(11) NOT NULL AUTO_INCREMENT, user_id varchar(16) PRIMARY KEY (seq) UNIQUE KEY user_id (user_id) この場合はseqカラムが主キーになるわけですが、 一般的にはカラム名はseqではなくてidですよね? なんで自分はseqにしたかというと、 user_idカラムのidには文字(半角英字)のIDを、 seqは連番を意味づけさせたいと思いました。 つまり seqがつくカラム名は連番で idがつくカラム名は文字列 と直感的に分かりやすくなるだろうと思ったからなのですが、 みなさんはこのケース(そもそもこのカラム構成が正しいかは分かりませんが・・)の場合は、 どのようなカラム名を付けますか?
- 締切済み
- MySQL
- mysqlでコード毎に連番をつける方法について
phpで会員制サイト制作を勉強しています。 mysqlにpdoで接続をしています。 添付画像のように種類毎に連番を付与してデータをINSERTしたいのですが、 ネットで調べて色々なSQLを試したところ、 コード毎での連番がうまくいきませんでした。 どのようなSQL文を使えば連番を振ってINSERTできるでしょうか? 一応、種類カラムと連番カラムを複合主キーにしています。 お分かりになる方は教えていただけると有難いです。
- 締切済み
- PHP
- PHPでMySQLに格納したファイルをダウンロードしたいです。
MySQLサーバに格納したファイルをPHPを使ってブラウザからファイルをダウンロードするプログラムを作りたいのですが、やり方が分からず困っています。方法もしくは簡単なスクリプトを教えてください。お願いします。 PHPを使ってブラウザからMySQLに画像やファイルをアップロードできたのですが、取り出す方法が分かりません。バイナリデータを取り出してimage srcを用い、ブラウザに画像を表示するまではできました。 テーブルは create table image( ID int not null primary key auto_increment, data MEDIUMBLOB); で作成しています。 ご教授お願いします。
- ベストアンサー
- PHP
- Mysql(5.1)を利用してWebアプリケーションを作成しているので
Mysql(5.1)を利用してWebアプリケーションを作成しているのですが、ユーザマスタのテーブルを作成する時に、カラム ユーザIDにAUTO_INCREMENTにした場合、他のカラム 登録者ユーザID ENTRY_USER_ID、更新ユーザID UPDATE_USER_IDにもAUTO_INCREMENTを指定したいのですがエラーになってCREATEできません。 エラーが表示されます。 ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key ぐぐって見たのですが、プライマリーキーなどといっしょに指定するみたいなのですが、SQL文は、create table USER_MST ( USER_ID INTEGER(10) AUTO_INCREMENT, NICKNAME VARCHAR(12) NOT NULL, ENTRY_USER_ID INTEGER(10) AUTO_INCREMENT, UPDATE_USER_ID INTEGER(10) AUTO_INCREMENT, ENTRY_YMD TIMESTAMP NOT NULL, UPDATE_YMD TIMESTAMP NOT NULL, DELETE_YMD TIMESTAMP NULL, PRIMARY KEY ( USER_ID ,ENTRY_USER_ID,UPDATE_USER_ID) )ENGINE=InnoDB CHARACTER SET UTF8; を実行しているのですが、うまくいきません。 ご教授お願いします
- 締切済み
- MySQL
- AUTO_INCREMENT を複数のテーブルに跨がす事って可能でしょうか?
PHP+MySQLで AUTO_INCREMENTを使用してidを管理したいんですが 複数テーブル(test1,test2)に 同じ「tourokou_id」というカラムが あります。 両方のtourokou_idをAUTO_INCREMENTすると test1 1 2 3 4 ・・・・・ test2 1 2 3 4 ・・・・・ となってしまいますよね。 これを test1 1 3 4 ・・・・・ test2 2 5 ・・・・・ という風にしたいんですがどのようにすればいいんでしょうか? そもそもできるんでしょうか?
- ベストアンサー
- MySQL
- MySQL VIEW連結時の設定
テーブル名 : table1 カラム1 : id(int) カラム2 : table2_id(int) テーブル名 : table2 カラム1 : id(int) カラム2 : time(int) ← phptaimestamp この二つをviewとして連結したいです。 table1.table2_id と table2.id をキーにするとして、問題はtable2.dateの中身がphpのtimestampで格納されている事です。 VIEW上で連結した際に、このtable2.dateのphpで吐いたtaimestampを通常の20131015の様な変換を加えたいのですが、MySQLの中で完結する方法はあるのでしょうか? 長文で申し訳ありませんが、アドバイス宜しくお願いします。
- ベストアンサー
- MySQL
お礼
ご指摘の通りです。 ご回答ありがとうございました。 達成できました。