包含 IF 语句的查询

发布于 2024-11-07 13:06:20 字数 690 浏览 1 评论 0原文

我希望我的查询使用 IF 语句,identify;如果当前的 num_unmarked 在此更新后将变为 0,则还将 is Final 设置为“YES”。

所以这是我的查询:

 $sql = "UPDATE results_tb 
                    SET 
                        num_unmarked = num_unmarked - 1,
                        is_final=IF( num_unmarked-1=0, 'YES', is_final ),
                        score = score + $awarded
                    WHERE 
                        user_id = $student 
                    AND 
                        test_id = $test 
            ";

实际发生的情况是,查询运行,num_unmarked 递减并且分数更新,但是即使 num_unmarked 为 1(不是 0),它仍然将 is_final 设置为“YES”。

有人可以告诉我我做错了什么或者启发我更好的方法吗? (我是菜鸟:D)

谢谢,

I want my query to using a IF statement, identify; if the current num_unmarked will become 0 after this update, then also set is final to 'YES'.

so here is my query:

 $sql = "UPDATE results_tb 
                    SET 
                        num_unmarked = num_unmarked - 1,
                        is_final=IF( num_unmarked-1=0, 'YES', is_final ),
                        score = score + $awarded
                    WHERE 
                        user_id = $student 
                    AND 
                        test_id = $test 
            ";

what is actually happening is, the query runs, num_unmarked decrements and score is updated however even if num_unmarked is 1 (not 0) it still sets is_final to 'YES'.

could somebody tell me what I am doing wrong please or enlighten me to a better way? (i am nooby :D)

thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

待"谢繁草 2024-11-14 13:06:20

更新在 MySql 中按顺序处理,因此对 num_unmarked 的更新发生在 IF 语句之前,并且 IF 语句使用新更新的值。因此,您实际上想要使用该值,就像它已经被更新一样,即直接将其与 0 进行比较:

is_final = IF(num_unmarked=0, 'YES', is_final),

The updates are processed sequentially in MySql, so the update to num_unmarked occurs before the IF statement, and the IF statement uses the newly updated value. So you actually want to use the value as if it has already been updated, i.e., compare it directly to 0:

is_final = IF(num_unmarked=0, 'YES', is_final),
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文