如果列值小于或等于用户的输入值,我想中止批处理sql查询事务并通知用户。
下面是发生的情况:
可用数量值从用户输入的数量值中减去,并在食物菜单表中更新该值。
用户的订单记录被插入到食品订单表中。
我的问题是:
foreach($menuData as $item=>$qty)
{
if(empty($qty) || $qty == '0')
continue;
$sqlArray[] = "INSERT INTO food_order
(user_id, item_id, quantity, order_type, updated_on, updated_by, created_by, created_on)
VALUES ($uid, $item, $qty, '$menu_type', NOW(), $uid, $uid, NOW())";
$sqlArray[] = "UPDATE food_menu SET available_qty = IF($qty >= available_qty, available_qty - $qty, available_qty) WHERE item_id = $item AND type = '$menu_type' AND DATE(updated_on) = CURRENT_DATE";
}
return (boolean) $this->db->exec($sqlArray);
如果 $qty
值大于 available_qty
字段值,我要中止中的整个系列事务 $sqlArray[]
.
我可以在查询本身中这样做吗?
1条答案
按热度按时间ztigrdn81#
我认为一个更好的方法是在insert和update语句开始之前检查可用数量和剩余数量。但为了获取信息,您可以尝试以下方法:
在食物菜单表上创建更新前触发器。在触发检查中,它的可用数量为负数,表示订单数量大于可用数量,然后使用
SIGNAL
语句引发一个错误,您必须在代码中捕获该错误并执行回滚,然后向用户显示相应的消息。