dポイントプレゼントキャンペーン実施中!

バージョン4.1.16を使っています。

jyunban(順番)を設けて、ある行が削除されたら
それより後ろにある行全てのjyunbanを1つ前に繰り上げたいです。

id name jyunban
1 鈴木  1
2 吉田  2
3 加藤  3
4 田中  4
5 佐藤  5
6 高橋  6
7 渡辺  7

とあって、例えばid「2」とid「5」を削除した時に
jyunbanの値を前に詰めたいのです。

id name jyunban
1 鈴木  1
3 加藤  2
4 田中  3
6 高橋  4
7 渡辺  5

これはトリガーなどを使わないと無理なのでしょうか?
それともそもそもjyunban(順番)という列を使わずに
これと同じような概念を作ることは可能なのでしょうか?

A 回答 (4件)

こんにちは。



まず、MySQL 4.x シリーズですと希望の動作は、
私の知ってる範囲ではできません。

MySQL 5.x シリーズではストアドプロシージャがサポートされています。
「削除」という操作を、ストアドプロシージャで行い、削除と同時に
順番を更新すればよいのではないでしょうか?

但し、その場合、注意しなければならないのは、同時更新への対応です。
すべてのレコードに対して変更が加えられる可能性がありますから、
Aユーザーが更新中に、Bユーザーが更新した場合に正しく更新されるか、
という点については慎重にテストしなければいけません。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
ストアドプロシージャという方法を使ってでも
そんなに簡単にうまくいくわけでもなさそうですね・・・
どうもjyunbanの設置には無理がある気がするので
変更を検討していきたいと思います。

お礼日時:2007/07/15 15:44

(1)この「順番」は、何のために必要なのですか?


(2)データ件数は、最大で何件くらいになりますか?
(3)同時にこの表にアクセスするのは、一人だけに限定できますか?
(4)「特定データを削除して番号をずらせる」に加え、「あるデータとあるデータを置換」という要件があるとのことですが、「あるデータとあるデータの間に挿入」といった要件も出てくるのでは?
(5)バージョン4.1.16では、トリガやストアドプロシジャは使えませんよ?
    • good
    • 0

変数でやってみてください



SET @JYNBAN=0;
SELECT id,name,@JYNBAN:=@JYNBAN+1
FROM テーブル
ORDER BY id ASC
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
せっかくお答えして頂いて申し訳ありません。
yambejpさんにも#1へのお礼で説明したことへの
回答を見つけてもらえないでしょうか。

お礼日時:2007/07/13 02:59

後から空いているidに追加する事はあるんでしょうか?


そうでなければidでソートすればいいだけの様な感じがしますが・・・
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
説明不足で申し訳ありません。順番の入れ替えも行いたいと思ってるので
やはりjyunban(順番)という項目を作る必要があると思うのです。
例えば、加藤と高橋の順番を入れ替えると

id name jyunban
1 鈴木  1
3 加藤  4
4 田中  3
6 高橋  2
7 渡辺  5

主キーのidは変わらずに、こういう形になると思います。
そうなった場合、2つ(id「2」とid「5」)削除した時に
jyunbanも変わっている必要があるので、
そういう変えられるSQL文や、あるいは方法が知りたいです。

お礼日時:2007/07/13 02:55

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