掲示板のようなシステムを開発しています。
登校時に記事に投稿ナンバーが割り当てられますが、記事を削除したときにこの投稿ナンバーを更新させたいのです。
どういうことかといいますと、投稿ナンバーが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で質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
共通モジュールでDBへの接続と利用方法
Visual Basic(VBA)
-
PL/SQLでのSQL文法
その他(データベース)
-
-
4
Oracle 2つのDate型の値の差を「分」で取得したい
その他(データベース)
-
5
PL/SQLカーソルの2重FORループができません
Oracle
-
6
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
7
カーソル0件の時にエラーを発生させる
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
ある条件の最大値+1を初番する...
-
SQLサーバから、項目の属性(型...
-
最小値をUPDATE
-
MySQLのDATE型カラム値がNULLの...
-
親と子供が複数のSQL取得方法
-
上位3位を求めるSQL文は?
-
副問合せの書き方について
-
Mysqlでunionを使った検索速度...
-
select文のwhere句に配列を入れ...
-
バインド変数について
-
[SQLServer] テーブル名からカ...
-
sqlで、600行あるテーブルを100...
-
SQLite3でこんな便利なSQLはで...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
”photo id” とは何ぞや?
-
エクセルの関数について教えて...
-
AUTO_INCREMENTのあるテーブル...
-
WordpressのContact form 7でzi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報