質問: 3 ``` ### 発生している問題 しかし、当然ですが、上のSQL文の2行目を実行する時点で、priority=3がきゃべつとたまねぎとで重複するため、2行目の実行はエラーとなってしまいます。 このように、UNIQUEカラムのデータを一括で更新したい場合はどのように 実装するのがよいでしょうか? 最近PHPやMySQLの勉強を始めたため、基本的な部分で理解が足らないかもしれません。ご教授ください。 ### 環境 PHP: 5.6.16。 mysqli を使用して接続 DB: MariaDB 5.5.52
回答: priorityをunique制約をつけてしまったがためにハマるネタですね。 更新処理を一括で行って途切れなくやるためには、 事前に勝手にpriorityを仮の値で振り直せば良いのではないでしょうか。 !更新の流れの例 仮の値の考え方として、例えば priorityの最大値をselect文で取得し、 フォーム入力されたpriorityパラメータの最大値とどちらが大きいか、 大きい方の値を元に個々のpriorityの値に足しこんでupdate文しておきます。 そのあと、フォーム入力されたpriority値を個々に適切にupdate文する流れです。 もちろん、一連の流れはトランザクション処理の中で行います。 コメントいただいた方法だと、 事前の値の振り直し基準値を求める手間が省けるし、 仮の値を振るUPDATE文が1回で済んで速いというのもあります。 !一旦負の値にしてからの例