- ベストアンサー
ある列の値を自動的にずらす方法とは?
- バージョン4.1.16を使用している場合、行が削除された際に特定の列の値を前に詰めたい場合、jyunban(順番)という列を使用する方法があります。
- jyunban列を設け、行が削除された場合、それ以降の行のjyunbanの値を1つ前に繰り上げることができます。
- ただし、トリガーなどを使用せずに自動的にずらすことは難しいため、jyunban列を使用しない方法で同様の概念を作ることは可能か検討が必要です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 まず、MySQL 4.x シリーズですと希望の動作は、 私の知ってる範囲ではできません。 MySQL 5.x シリーズではストアドプロシージャがサポートされています。 「削除」という操作を、ストアドプロシージャで行い、削除と同時に 順番を更新すればよいのではないでしょうか? 但し、その場合、注意しなければならないのは、同時更新への対応です。 すべてのレコードに対して変更が加えられる可能性がありますから、 Aユーザーが更新中に、Bユーザーが更新した場合に正しく更新されるか、 という点については慎重にテストしなければいけません。
その他の回答 (3)
- chukenkenkou
- ベストアンサー率43% (833/1926)
(1)この「順番」は、何のために必要なのですか? (2)データ件数は、最大で何件くらいになりますか? (3)同時にこの表にアクセスするのは、一人だけに限定できますか? (4)「特定データを削除して番号をずらせる」に加え、「あるデータとあるデータを置換」という要件があるとのことですが、「あるデータとあるデータの間に挿入」といった要件も出てくるのでは? (5)バージョン4.1.16では、トリガやストアドプロシジャは使えませんよ?
- yambejp
- ベストアンサー率51% (3827/7415)
変数でやってみてください SET @JYNBAN=0; SELECT id,name,@JYNBAN:=@JYNBAN+1 FROM テーブル ORDER BY id ASC
お礼
ご返答ありがとうございます。 せっかくお答えして頂いて申し訳ありません。 yambejpさんにも#1へのお礼で説明したことへの 回答を見つけてもらえないでしょうか。
- calltella
- ベストアンサー率49% (317/635)
後から空いているidに追加する事はあるんでしょうか? そうでなければidでソートすればいいだけの様な感じがしますが・・・
お礼
ご返答ありがとうございます。 説明不足で申し訳ありません。順番の入れ替えも行いたいと思ってるので やはりjyunban(順番)という項目を作る必要があると思うのです。 例えば、加藤と高橋の順番を入れ替えると id name jyunban 1 鈴木 1 3 加藤 4 4 田中 3 6 高橋 2 7 渡辺 5 主キーのidは変わらずに、こういう形になると思います。 そうなった場合、2つ(id「2」とid「5」)削除した時に jyunbanも変わっている必要があるので、 そういう変えられるSQL文や、あるいは方法が知りたいです。
お礼
ご返答ありがとうございます。 ストアドプロシージャという方法を使ってでも そんなに簡単にうまくいくわけでもなさそうですね・・・ どうもjyunbanの設置には無理がある気がするので 変更を検討していきたいと思います。