从数据库mysql和PHP应用折扣

时间:2014-09-26 06:09:59

标签: php mysql

我在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;
}

2 个答案:

答案 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;

}