勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

1回のSQL文で複数のUPDATE

      2014/07/03

INSERTはバルクインサートを使えばいいが、
UPDATEはあまり聞かないので調べたところ、
一括で出来るものを発見。

$sql = "
UPDATE テーブル名
SET calam_num=
(CASE calam_seq
WHEN seq_1 THEN num_1 WHEN seq_2 THEN num_2 ...
ELSE calam_num END);
";

でUPDATEできる。

WHENのところでseqを指定して、該当seqのnumを書き換える。

やりたかった事は、

----------
numが連番になっているところを途中のカラムを削除
↓↓
欠番が出るので、削除したカラム以降のnumを+1する
----------

で、↓↓でとりあえずは解決できた。

//欠番を埋める為、SQL文の中身をループで作成
for($i=1; $i<=count($sort_seq); $i++){
$sort_sql .= 'WHEN '.$sort_seq[$i-1].' THEN '.$i.' ';
}

//ソート順を欠番を埋めて並びかえ
$sql = "
UPDATE テーブル名
SET num=
(CASE seq
$sort_sql
ELSE num END);
";

尚、他にも方法はあるみたいなので、機会を見て検証する。

↓↓

http://d.hatena.ne.jp/IT7C/20100703/1278125750

 - MySQL

  関連記事

ランダム表示のページング

MySQLからデータを持ってくる際に、 ランダムな表示を行ってほしいと言われた。 ...

MySQLでdatetime型にもインデックスを使用

ログ関連のデータを格納するテーブルがあり、集計を行う際に非常に時間がかかった。レ ...

MySQLでテーブルとデータの複製(コピー)

MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ...

MySQLで開始から終了日付内を調べたいとき

等号不等号でもできるけど、BETWEENというのがよさそう。 ■参考サイト ht ...

MySQLでカラム数の異なるテーブルを結合する(UNION)

MySQLでカラム数の異なるテーブル同士をUNIONで結合させたかった。ただ、何 ...

MySQLのUNION

$sql_1 = "SELECT name_a,name_b FROM tabl ...

プリペアドステートメント

個人的に得た内容として、SQL文だけ先にDBに送って、 変数は後で送る。だからS ...

MySQLのREGEXPで半角記号を検索したい場合

MySQLのREGEXPで半角記号を検索したい場合 \\を付けてエスケープしない ...

MySQLでserver has gone~というエラー

MySQLで「MySQL server has gone away」というエラー ...

InnoDBのオートインクリメント

MySQLのInnoDBでIDというカラムにオートインクリメント設定していたが、 ...