我在mysql中有一个表,用于存储适用于餐馆的折扣。结构如下:
id res_id disc_amt disc_percntge
------------------------------------------
1 2 300 15
2 2 500 25
$sqldisc = "select * from disc_n_coupons where restaurant_id=?";
$datadisc = DB::instance()->prepare($sqldisc)->execute
(array($_SESSION['res_in_sess']))->fetchAll();
现在,我想申请,如果购物车总数已达到disc_amt
,则应使用disc_percntge
。
目前两种折扣都已应用,即如果购物车中的总价已达到500
,则会应用15%
,然后再次以折扣价格25%
应用。但我只想要一张光盘按所述金额申请。
以下是我的逻辑
foreach($datadisc as $rowsdisc){
if($subtl>$rowsdisc['disc_amt']){
echo $subtl."*".$rowsdisc['disc_percntge']."/"."100";
$subtldisc = ($subtl*$rowsdisc['disc_percntge'])/100;
}
$subtl = $subtl-$subtldisc;
}
答案 0 :(得分:0)
可能是您可以使用限制查询来应用一个商品
$sqldisc = "select * from disc_n_coupons where restaurant_id=? and disc_amt >=? order by disc_amt desc limit 1";
$datadisc = DB::instance()->prepare($sqldisc)->execute
(array($_SESSION['res_in_sess'],$subtl))->fetchAll();
答案 1 :(得分:0)
您应该看到查询按降序返回折扣,首先是最大金额(如果适用更大的折扣,则应忽略后面的较小折扣)
$sqldisc = "select * from disc_n_coupons where restaurant_id=? ORDER BY disc_amt DESC";
然后,您需要做的就是在应用了第一个允许的折扣后打破循环,例如;
foreach($datadisc as $rowsdisc) {
if($subtl < $rowsdisc['disc_amt'])
continue;
echo $subtl."*".$rowsdisc['disc_percntge']."/"."100";
$subtldisc = ($subtl*$rowsdisc['disc_percntge'])/100;
$subtl = $subtl-$subtldisc;
break;
}