お世話になります。
配列でデータを受け取って、下の様な構文を書けばPDOを使用してupdateできますが、
データの削除を行って、idが欠番になった場合の対策として、どの様に書けば良いのかが
分かりません。
-------------------------------------------------
$id = $_POST['id'];
$test = $_POST['test'];
$sql = "UPDATE test_table SET test = ? WHERE id = ?";
$stmt = $conn->prepare($sql);
foreach ($test as $id => $value) {
$stmt->execute(array($value, ++$id));
}
-------------------------------------------------
もし削除処理が行われたら、欠番の穴埋めを行い、尚且つidは
オートインクリメントしているので、最終のidを取得してALTER TABLEで
新規データを追加した際にも欠番が出ないようにしようかとも考えましたが、
効率的とは思えなかったので、もしidに欠番があっても該当する「 id 」に
正常にデータをupdateできる構文をご教示いただきく存じます。
----------------
▼スペック
PHP 5.3.3
MySQL 5.0.95
----------------
No.1ベストアンサー
- 回答日時:
>$id = $_POST['id'];
そもそも欠番のIDがPOSTされるというのが「あり得ない」ハズです。当該レコードを選択したらphpスクリプト側で自動的にセットするものであって、ユーザに入力してもらうものではありませんから。
もし「当該IDのデータの更新内容を入力している間に、他の端末から削除されてしまった」というケースを想定するならば、updateした更新件数が 0 だったら【更新できませんでした】とか【当該IDのデータがありません】などと表示して止まるしかありません。削除されたものはどうやってもupdate出来ません。
ご回答をいただき、ありがとうございます。
一応結論として、「 削除 」のアクションがあった場合にdelete文を
発行せずに、update文で該当のid( クリックされたid )のtestカラムの値を
空にしました。
データをselectする際に、
「 もしtestカラムのデータが空であれば、該当のidレコードは表示させない 」という
条件分岐をさせました。但し、その後のupdate文の発行でidがズレてしまうので、
hiddenで空のデータとidは埋め込んでおきます。
つまり、1,2,3,4,5,・・・,n、という絶対に欠番が出ないようにしました。
何だかスッキリしない感じですが、一応目的の形ににはなりましたのでご報告いたします。
参考になるご回答をいただき、大変感謝申し上げます。
ありがとうございました。
No.2
- 回答日時:
>もし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、という絶対に欠番が出ないようにしました。
何だかスッキリしない感じですが、一応目的の形ににはなりましたのでご報告いたします。
参考になるご回答をいただき、大変感謝申し上げます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- MySQL SQLで日付別のIDを生成するには 3 2022/10/09 10:34
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
MATLAB アスキーファイルの保...
-
Access2000 CopyFromRecordset...
-
PHP MySQL ページング処理
-
C言語で地図を描きたい
-
WEBアプリのMVCについて質問です。
-
エクセルVBAとWEBクエリ...
-
switch()文で値の大小比較
-
ミュージックのアートワークを...
-
【PHP】APIやRSSが存在しないサ...
-
perl LWPでURLにアクセスした時...
-
別サイトのHTML内にある情報を...
-
ローカルのコンピュータ名を取...
-
どういうプログラムを関数化を...
-
pdftkを使った処理をバッチファ...
-
bashの関数の引数にスペースが...
-
PHPでのログイン機能でのメール...
-
formの確認ページからformに戻...
-
インターネットの閲覧履歴を時...
-
GoogleやYahoo!で検索したサイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
【C#】DataGridViewの最大列数...
-
excel access連携 このテーブル...
-
WordでExcelデータを差込...
-
ActiveReportのサブレポート機...
-
GridViewからチェックボックス...
-
★お手上げ状態です。助けてくだ...
-
VBA内でのGetPixelを使用した時...
-
表を表示するコントロールについて
-
Windowsのマクロプログラムで、...
-
INIファイルに一括書き込みを行...
-
MSFlexGridのデータを初期化し...
-
C#でのForm間のデータ受け渡し...
-
「外部データの取り込み」とい...
-
C言語で地図を描きたい
-
小数点以下を含む計算でバグが...
-
エクセルVBAで楽天証券に注...
-
CSVのインポート【ASP.NET】
-
画像の読み込み&白黒判別プロ...
おすすめ情報