実現したいこと
MySQL 5.7 でUNSIGNED
なカラムに対し、「0のときは引き算をしない」ようにする方法を知りたいです。
該当のソースコード
よくある「いいね」機能です。
現状は以下のように ID = 1
のレコードの count_likes
カラムを、足し算|引き算しています。(実際はエスケープしています。)
php
1// like|unlikeした対象の投稿ID 2$id = $_POST['id']; 3 4// 現状が unlike なら like したということなので '+' し、逆なら '-' する 5$puramai = $_POST['like_state'] === 'unlike' ? '+' : '-'; 6 7// 足し算|引き算 8$sql = " 9 UPDATE comments 10 SET count_likes = count_likes {$puramai} 1 11 WHERE ID = {$id} 12";
発生している問題
しかし count_likes
カラムは UNSIGNED
なので、0のときに引き算してしまうとエラーになってしまいまして…
避けるためにはどのようなクエリがよろしいでしょうか?
試そうとしたこと
きっと CASE WHEN
でできるのでは?と考えてはいるのですが、これ↓ではありませんよね…
これでは「count_likes
が0のときは、必ず0」になってしまうので、なんとかうまいこと「count_likes
が0のとき、かつ $puramai が '-' のときは、必ず0」のような記述はできないものでしょうか?
php
1$sql = " 2 UPDATE comments 3 SET count_likes = CASE 4 WHEN count_likes = 0 5 THEN 0 6 ELSE count_likes {$puramai} 1 7 END 8 WHERE ID = {$id} 9";

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/09/04 08:50