• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ある列の値を自動的にずらしたい)

ある列の値を自動的にずらす方法とは?

このQ&Aのポイント
  • バージョン4.1.16を使用している場合、行が削除された際に特定の列の値を前に詰めたい場合、jyunban(順番)という列を使用する方法があります。
  • jyunban列を設け、行が削除された場合、それ以降の行のjyunbanの値を1つ前に繰り上げることができます。
  • ただし、トリガーなどを使用せずに自動的にずらすことは難しいため、jyunban列を使用しない方法で同様の概念を作ることは可能か検討が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • SUPER-NEO
  • ベストアンサー率38% (706/1857)
回答No.4

こんにちは。 まず、MySQL 4.x シリーズですと希望の動作は、 私の知ってる範囲ではできません。 MySQL 5.x シリーズではストアドプロシージャがサポートされています。 「削除」という操作を、ストアドプロシージャで行い、削除と同時に 順番を更新すればよいのではないでしょうか? 但し、その場合、注意しなければならないのは、同時更新への対応です。 すべてのレコードに対して変更が加えられる可能性がありますから、 Aユーザーが更新中に、Bユーザーが更新した場合に正しく更新されるか、 という点については慎重にテストしなければいけません。

takagoo100
質問者

お礼

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

その他の回答 (3)

回答No.3

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

変数でやってみてください SET @JYNBAN=0; SELECT id,name,@JYNBAN:=@JYNBAN+1 FROM テーブル ORDER BY id ASC

takagoo100
質問者

お礼

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

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

後から空いているidに追加する事はあるんでしょうか? そうでなければidでソートすればいいだけの様な感じがしますが・・・

takagoo100
質問者

お礼

ご返答ありがとうございます。 説明不足で申し訳ありません。順番の入れ替えも行いたいと思ってるので やはりjyunban(順番)という項目を作る必要があると思うのです。 例えば、加藤と高橋の順番を入れ替えると id name jyunban 1 鈴木  1 3 加藤  4 4 田中  3 6 高橋  2 7 渡辺  5 主キーのidは変わらずに、こういう形になると思います。 そうなった場合、2つ(id「2」とid「5」)削除した時に jyunbanも変わっている必要があるので、 そういう変えられるSQL文や、あるいは方法が知りたいです。

関連するQ&A

専門家に質問してみよう