Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果付款大于剩余余额,则将剩余余额更新为0_Php_Sql - Fatal编程技术网

Php 如果付款大于剩余余额,则将剩余余额更新为0

Php 如果付款大于剩余余额,则将剩余余额更新为0,php,sql,Php,Sql,使用此查询,我可以轻松地将付款扣除到剩余余额中 假设我的rem_余额是3000,我的付款是5000,所以基本上变化是2000 UPDATE tbl_users SET rem_balance = (rem_balance - '5000') WHERE user_id = '2017001002' 但是,由于我使用了这个查询,rem\u余额会更新到-2000,我想要实现的是,如果付款是rem\u余额,rem\u余额将变为0,它将分离更改。类似的方法应该可以工作 UPDATE tbl_users

使用此查询,我可以轻松地将付款扣除到剩余余额中

假设我的rem_余额是3000,我的付款是5000,所以基本上变化是2000

UPDATE tbl_users SET rem_balance = (rem_balance - '5000') WHERE user_id = '2017001002'

但是,由于我使用了这个查询,rem\u余额会更新到-2000,我想要实现的是,如果付款是
rem\u余额,rem\u余额将变为0,它将分离更改。

类似的方法应该可以工作

UPDATE tbl_users 
SET rem_balance = (CASE WHEN rem_balance < 5000 THEN 0 ELSE rem_balance - 5000 END)
WHERE user_id = '2017001002'
更新tbl\u用户
设置rem_balance=(rem_balance<5000时为0,否则rem_balance-5000结束)
其中用户_id='2017001002'

请注意,您在SQL中使用隐式转换(“5000”而不是5000)。这是一个坏习惯,在某些情况下会损害查询的性能。例如,如果
tbl\u users.user\u id
也是整数,那么更新将无法使用索引来搜索具有特定
user\u id
的行,并且它将执行非常缓慢的顺序扫描。

添加您正在使用的DBMS标记我使用mysql作为我的数据库。和php作为我的语言,如果条件允许,您可以使用。like:SET rem_balance=IF(),使用一个
case
表达式。referee链接在这个查询中是否有可能获得rem_balance<5000的更改,like返回剩余值?@LionSmith我不确定你在问什么。你想还剩下的余额吗?不。。这正是我要问的。。我的评论只是一个基于你答案的问题。@LionSmith我认为这不可能在一个查询中实现。您需要在更新后运行
选择
,以检索新的
rem_余额
值。