MYSQL多表更新
伊谢尔伦
伊谢尔伦 2017-04-17 11:24:11
0
4
632

有三张表:

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封装成的一个用来调用的“函数”
虽然已经可以暂时告一段落,仍然期待着更完美的方案...

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(4)
阿神

已測:

update tbl_order as a, tbl_coupon as b, tbl_member as c set a.status = 2, b.used = 0, b.used_order = '', c.credit = (c.credit + a.need_credit) where a.id = {$order_id} and b.used = 2 and b.used_order = {$order_id} and c.id = a.uid 

有一個疑問,上述 mysql 語句的邏輯是使用者的退單動作嗎,恢復使用過的優惠券,回饋使用者使用過的積分,然後修改訂單的狀態。

迷茫
update table1 as a, table2 as b, table3 as c 
set a.status = ..., b.used = ..., c.used_order = ...
where 条件

容易忽略的地方應該是在最開始的update中將要用到的幾張表全部都引入。

阿神

個人認為題主老師給的答案不是很可靠
這個東西用儲存過程無錯,但是眾所周知儲存過程挺耗mysql資源,維護起來也比較難

你描述的東西,其實是個完整的事務,
用mysql的事務去實作吧
不知道你用的是那種程式語言,總之應該都有支援事務的方法。

迷茫

雷雷

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板