MySQL ダウンロード毎に加算するカラムの初期値がNULLの場合でも、SQLだけで加算する方法
ダウンロードボタンをクリックされたら、カウントアップする仕様が、システムにあります。
download_tabeに、idカラムとdownload_countカラムがあり、idカラムの値で更新対象を特定して、download_countカラムを加算します。
id | download_count |
---|---|
1 | 10 |
2 | NULL |
3 | 0 |
4 | 5 |
download_countカラムに数値が入っていれば、UPDATE文だけでカウントアップができます。
UPDATE download_tabe SET download_count = download_count+1 WHERE id = 3;
この方法では、idカラムが2の場合のように、download_countカラムの値がNULLの場合は更新できません。
NULLのままになります。
Photo by KOBU Agency on Unsplash
CASE式を導入して解決
SET句の後の、download_countカラムに反映したい値を求める際に、CASE文が使えれば、対処できそうだと思って試してしました。
結果は対処できました。
UPDATE download_tabe SET download_count = ( CASE WHEN download_count IS NULL THEN 1 ELSE download_count+1 END ) WHERE id = 2;
download_countカラムがNULLであれば、1を値とします。
download_countカラムがNULLでなければ、download_countカラムの値に1を加算します。
プログラムは、データベース上の値がどのようになっているのか気にすることなく、SQLのUPDATE文だけで、カウントアップを済ませられました。