【问题标题】:What is the best way to add discounts to ordering process?在订购过程中添加折扣的最佳方式是什么?
【发布时间】:2012-04-30 17:32:02
【问题描述】:
假设一个网站销售产品并希望使用优惠券代码提供折扣。构建这个的最佳方法是什么?这就是我的想法,你能确认这是一个正确的方法吗?请问还有什么建议吗?别人是怎么做到的?
这是我的想法:
订单中将包含给定的产品作为订单项目。将有一个输入优惠券代码输入,如果输入正确的代码,一个负值的新行项目将添加到订单中。换句话说,现在订单将包含两个项目:
这是处理折扣和优惠券的正确方法吗?
【问题讨论】:
标签:
php
architecture
schema
structure
【解决方案1】:
有多种方法可以做到这一点。没有一种解决方案。但是,这里有一些陷阱。
- 用户从购物车中删除了折扣商品?
- 用户添加了多个相同的优惠券代码?
- 用户的购物车是空的?
最后,在订单完成时应用折扣的解决方案将最不容易出现上述情况。不要试图跟踪订单并在数据库或会话中添加标志。这将是徒劳的。您真的想专注于测试是否满足优惠券的条件。设想applyCoupons() 或eligibleForDiscount($coupon) 等函数。
【解决方案2】:
您应该在数据库中有两个关系表。
优惠券有不同的折扣价值?
您可能有带有 ID、代码、折扣的 coupons 表,并且您可以像这样(ABC、BBC、CCS)或每行一个以逗号分隔的优惠券代码存储在 code 字段中。
如果用户在输入字段中输入优惠券 ID,请在数据库中检查,阅读 discount 并执行 $final_price = $price * $discount(假设您将折扣存储为 0.2(20%)等等上。
如果您想要逗号分隔的优惠券代码,请执行以下操作:
$discount = 1;
while ( $var = mysql_fetch_assoc($result)) {
$coupon = explode(',', $var['code']);
$count = count($coupon);
for ($i = 0; $i <= $count; $i++) {
if($_POST['input_coupon'] == $coupon[$i]) { $discount = $var['discount'] }
}
然后你 $final_price = $price * $discount ;
你可以把它放在一个 AJAX POST 请求中,瞧;
或者每个优惠券代码使用一行,更简单。
或者做一个 JOIN 查询(通过 id 链接的表)来简化这个过程。