
掲示板のようなシステムを開発しています。
登校時に記事に投稿ナンバーが割り当てられますが、記事を削除したときにこの投稿ナンバーを更新させたいのです。
どういうことかといいますと、投稿ナンバーが1~10の記事があったとします。そこれ4~7の記事を削除すると、残りの記事数は6つとなり、記事ナンバーは上から1,2,3,8,9,10となり、連番ではなくなってしまいます。今後このデータベースを利用するに当たって、この数字が連番になっていないと困ります。
そこで、記事が削除されたときに投稿ナンバーをチェックし、間違っていたら数値を更新させたいのです。先ほどの例ですと、8,9,10を4,5,6にしたいのです。
検索してみた結果、データの更新(上書き)にはUPDATE構文を使えば良いそうですが、これを1行ずつ実行させる方法が分かりません。limit文は引数が1つしか使えないため、0番目からn番目の要素すべてを一気に検出・置換してしまいます。
このような問題にどのようにして対応すればよいのか、皆様の知恵をお貸しください。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
がると申します。
時々拝見するタイプの質問なのでちと気になるのですが。
その「投稿ナンバー」は、テーブルのプライマリキーになってないでしょうか?
それ次第で大分かわるので。
ただ、いずれにしても「かならず連番である必要がある」設計は、それ自体にミスがあることが多いです。
No.1
- 回答日時:
過去にさかのぼって毎回レコードを直すのは
非効率的だと思います。たとえば古い1件の修正を
するためにその後の登録分何万件もの修正が発生する
可能性もあり、その運用方法は致命的かもしれません。
とりあえず、どうしてもというなら
set @no=0;
update `table` set `投稿ナンバー`=@no:=@no+1
などでいけそうですが、表示順の保障がないので、
もうすこし工夫が必要かもしれません。
そもそも「数字が連番になっていないと困る」状況と
いうのが理解できません。単に序列がひつようなだけ
であれば連番の意味はあまりないかと。
またどうしても連番にしたいということであれば
連番を管理するための専用のテーブルを用意し、
検索時にINNER JOINするのがもっとも効率的かと
おもいます。
この回答への補足
回答ありがとうございます。
おっりゃるとおり、確かに場合によっては何万件もの修正が必要になるかもしれませんが、あくまで掲示板製作の実験ですので、投稿数に上限(最高でも300件とか)をつけることによってカバーできるものと思い、製作しておりました。
CGIの掲示板などで投稿が削除された後、欠番が何らかの方法で埋められて、結果記事ナンバーが連番になっている(表示順は違う場合あり)ものを見かけたので、どのようにして実行させているのか気になって質問しました。
お教えいただいた方法も試してみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソフトバンクの無料着うたのお...
-
一度のsqlで値を取得するには
-
ある条件の最大値+1を初番する...
-
php+mysqlで複数選択削除について
-
エクセルの関数について教えて...
-
VMwareがCDドライブを認識する...
-
OSPFのDRの選出基準について シ...
-
スクリーンセイバー
-
テーブル名を省略して「h.id」...
-
select文のwhere句に配列を入れ...
-
複数のテーブルを結合して表示...
-
VBA リボンのCheckBox2個をOpt...
-
MySQLのint型で001と表示する方...
-
マイクラPC版のコマンドで効率...
-
Access VBAでのIDの自動発番
-
Yahoo .comの idには年齢制限、...
-
差し込み後、元データを変更し...
-
for whichの使い方
-
特定の文字列で列を区切るには?
-
SQLで列名を変数にできないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報