有三张表:
tbl_order
id 订单ID
uid 用户ID
need_credit 订单所需积分
status 订单状态
....
tbl_coupon
id
uid
used_order 优惠码所使用到的order.id
used 0:未使用/1:已使用/2:已标记为不可用
....
tbl_member
id 用户ID
credit 用户积分
....
条件:传入$order_id
把tbl_order中
id = {$order_id}
的status标记为2
把tbl_coupon中
used = 2 AND used_order = {$order_id}
的 used标记为0, used_order 标记为 ""
把tbl_member中
id = tbl_order.uid /* 这里的tbl_order.uid是上面tbl_order.id={$order_id}那条数据的tbl_order.uid */
的 credit += tbl_order.need_credit
需要由一句SQL来完成
请教了老师,用储存过程来分步实现了这个需求。
存储过程就是将若干sql封装成的一个用来调用的“函数”
虽然已经可以暂时告一段落,仍然期待着更完美的方案...
已测试:
有一个疑问,上述
mysql
语句的逻辑是用户的退单动作吗,恢复使用过的优惠券,返还用户使用过的积分,然后修改订单的状态。容易忽略的地方应该是在最开始的
update
中将要用到的几张表全部都引入。个人认为题主老师给的答案不是很靠谱
这个东西用存储过程无错,但是众所周知存储过程挺耗mysql资源,维护起来也比较难
你描述的东西,其实是一个完整的事务,
用mysql的事务去实现吧
不知道你用的是那种编程语言,总之应该都有支持事务的方法。