根据数量和连接计数多次显示MySQL记录

时间:2013-11-23 03:28:51

标签: php mysql

我正在创建礼品卡功能,客户可以购买多种不同面额的礼品卡。例如,他们可以购买1 x 50美元的礼品卡和/或3 x 100美元的礼品卡等,其中3gcard_qty,而100美元的礼品卡是gcard_name。每个面额也与product_id

相关联

购物车功能将每个product_id及其gcard_qty存储为MySQL数据库中的一行,以及唯一代码和其他一些数据(价格等)。但是,当我通过电子邮件发送礼品卡详细信息时,我需要使用他们自己的唯一代码显示所有礼品卡。这意味着3张100美元的礼品卡需要三次显示,并附有修改后的代码,以便可以单独兑换。

以下是我到目前为止循环记录并显示每一行的内容:

while($row = mysql_fetch_array($result))
{
    $gcid = $row["gcard_id"];
    for ($i = 0; $i < count($gcid); $i++) {
        $name = $row["product_name"];
        $price = $row["product_price"];
        $cardcode = $row["gcard_id"];
        $detailsofgiftcards .= $name . " <strong>Code: " . $cardcode . "</strong><br />";
    }
}

在回复$detailsofgiftcards时,我自然只会为每个礼品卡值获得一个唯一代码,如下所示:

  

礼品卡$ 100.00价值代码:2000478282

     

礼品卡$ 50.00价值代码:2000478283

我想要的是在每张卡的唯一代码的末尾自动添加短划线和数字,并将每张卡显示为单独的产品,例如:

  

礼品卡$ 100.00价值代码:2000478282-1

     

礼品卡$ 100.00价值代码:2000478282-2

     

礼品卡$ 100.00价值代码:2000478282-3

     

礼品卡$ 50.00价值代码:2000478283-1

如果只有一张具有该值的礼品卡,则显示代码和-1,否则显示同一行的多个记录,并以递增的值连接。

我想我需要从以下内容开始:

 foreach($rows as $row) {
     for($i = 0; $i < $row['gcard_qty']; $i++) {
         // ???
     }
 }

然后我完全迷失了。

3 个答案:

答案 0 :(得分:0)

如果我给你的数据结构命名正确,那么你可以这样做:

$gcid = $row["gcard_id"];
for ($i = 0; $i < count($gcid); $i++) {
    $name = $row["product_name"];
    $price = $row["product_price"];
    $cardcode = $row["gcard_id"];

    $quantity = $row["gcard_qty"];
    for ($j = 1; $j <= quantity; ++$j) {
        $detailsofgiftcards .= 
            $name . " <strong>Code: " . $cardcode . "-$j </strong><br />";
    }
}

答案 1 :(得分:0)

这应该足够了:

while($row = mysql_fetch_array($result)){
    $name = $row["product_name"];
    $price = $row["product_price"];
    $cardcode = $row["gcard_id"];
    $quantity = $row["gcard_qty"];
    for ($cid = 1; $cid <= $quantity; ++$cid) {
        $detailsofgiftcards .= 
            $name . " <strong>Code: " . $cardcode . "-$cid </strong><br />";
    }
}

你的内循环出错了。您正在使用count($gcid),其中gcid是id字段。因此它将始终运行一次并终止。像我在代码中所做的那样将其更改为数量。

答案 2 :(得分:0)

我的理解是您希望使用额外的“-X”代码将新产品添加到数据库中。看起来像其他答案只是帮助你回应所有“-X”,这可能更符合你的想法......

foreach($rows as $row) { 
     for($end_id = 1; $end_id <= $row['gcard_qty']; $end_id++) { 
        $new_cardcode = $row['gcard_id'];
        $new_cardcode .= '-'.$end_id;

        if($end_id === 1){
            //update 'gcard_id' of the current row
        } else {
            //create a new product entry in database with all the same values as
            //$row except with the new cardcode
        }
    }
}

与你的主要区别在于我们在1而不是0上启动for循环索引,以便我们可以在$ new_cardcode字符串中使用它。