- ベストアンサー
IDに欠番があった場合のupdate処理
- 配列でデータを受け取り、idに欠番があっても正常にデータをupdateする方法について教えてください。
- 削除処理が行われた場合の欠番の穴埋めや、idのオートインクリメントの扱いについても教示してください。
- 使用している環境はPHP 5.3.3とMySQL 5.0.95です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>$id = $_POST['id']; そもそも欠番のIDがPOSTされるというのが「あり得ない」ハズです。当該レコードを選択したらphpスクリプト側で自動的にセットするものであって、ユーザに入力してもらうものではありませんから。 もし「当該IDのデータの更新内容を入力している間に、他の端末から削除されてしまった」というケースを想定するならば、updateした更新件数が 0 だったら【更新できませんでした】とか【当該IDのデータがありません】などと表示して止まるしかありません。削除されたものはどうやってもupdate出来ません。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>もしidに欠番があっても該当する「 id 」に >正常にデータをupdateできる構文 考え方は2つ (1)そもそも存在しないIDをupdateするのだから存在しない時点でupdateはされないので問題ない たとえばidが1,2,4しかない時点で update ~ where id=3 としても条件節にヒットするデータがないので0件更新されておしまい (2)存在しないIDをupdateするときには新規に追加する これはINSERT ... ON DUPLICATE KEY UPDATE構文を使えばよい 同じ例でいえばidが1,2,4しかないとき ID=1はアップデータするけど,ID=3のときにはINSERTする いずれにしてもIDはデータを特定するためのものですから IDを振り直すという行為はしていけない さらに言えば、データ削除するのではなくdelete_flag的なカラムで コントロールすればIDに抜け番は発生しない (ただし抜け番が発生してもなんの問題もないし、むしろ削除フラグのついた IDに対してアップデートをしていいかどうかのルール決めが必要になるが)
お礼
ご回答をいただき、ありがとうございます。 一応結論として、「 削除 」のアクションがあった場合にdelete文を 発行せずに、update文で該当のid( クリックされたid )のtestカラムの値を 空にしました。 データをselectする際に、 「 もしtestカラムのデータが空であれば、該当のidレコードは表示させない 」という 条件分岐をさせました。但し、その後のupdate文の発行でidがズレてしまうので、 hiddenで空のデータとidは埋め込んでおきます。 つまり、1,2,3,4,5,・・・,n、という絶対に欠番が出ないようにしました。 何だかスッキリしない感じですが、一応目的の形ににはなりましたのでご報告いたします。 参考になるご回答をいただき、大変感謝申し上げます。 ありがとうございました。
お礼
ご回答をいただき、ありがとうございます。 一応結論として、「 削除 」のアクションがあった場合にdelete文を 発行せずに、update文で該当のid( クリックされたid )のtestカラムの値を 空にしました。 データをselectする際に、 「 もしtestカラムのデータが空であれば、該当のidレコードは表示させない 」という 条件分岐をさせました。但し、その後のupdate文の発行でidがズレてしまうので、 hiddenで空のデータとidは埋め込んでおきます。 つまり、1,2,3,4,5,・・・,n、という絶対に欠番が出ないようにしました。 何だかスッキリしない感じですが、一応目的の形ににはなりましたのでご報告いたします。 参考になるご回答をいただき、大変感謝申し上げます。 ありがとうございました。