みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

mysqlでコード毎に連番をつける方法について

phpで会員制サイト制作を勉強しています。
mysqlにpdoで接続をしています。

添付画像のように種類毎に連番を付与してデータをINSERTしたいのですが、
ネットで調べて色々なSQLを試したところ、
コード毎での連番がうまくいきませんでした。
どのようなSQL文を使えば連番を振ってINSERTできるでしょうか?
一応、種類カラムと連番カラムを複合主キーにしています。

お分かりになる方は教えていただけると有難いです。

投稿日時 - 2015-03-18 15:49:19

QNo.8938236

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

あ、「IFNULL(MAX(連番), 0) + 1」のほうがいいですね…

投稿日時 - 2015-03-18 16:51:06

ANo.3

MyISAMだと "推奨はされませんが" 複数のプライマリキーを設定することにより自動化出来るようです↓

http://stackoverflow.com/questions/18948983/mysql-autoincrement-field-in-composite-primary-key-for-each-unique-combination

普通にSQLでやるなら↓

$sql = '
INSERT INTO テーブル(種類, コメント, 連番)
SELECT (:種類, :コメント, MAX(連番) + 1)
WHERE 種類 = :種類
';
$params = [
':種類' => 'ここに種類を記載',
':コメント' => 'ここにコメントを記載',
];
$pdo->prepare($sql)->execute($params);

投稿日時 - 2015-03-18 16:47:14

ANo.2

SQL文でinsert/selectを使えばいいと思います。

insert into `テーブル名` (`種類`, `comment`, `連番`) select 'A', 'comment_A_2', ifnull(max(`連番`),0) +1 from `テーブル名` where `種類`='A';

投稿日時 - 2015-03-18 16:08:00

ANo.1

INSERTする前に
種類を条件にSELECTして種類ごとに連番のMAXを取得
それからMAX+1してINSERTすればいいわ

投稿日時 - 2015-03-18 15:53:45

あなたにオススメの質問