如何为订单中的每个框创建唯一编号

时间:2016-07-11 18:27:25

标签: php sql

问题不在于我如何生成数字,这对于我拥有的其他应用程序运行正常。问题是计算盒子总数并多次迭代一次forloop。现在我将box_ct * qty_ord乘以得到总框。顺便说一下,我仍然试图理解我能用foreach和for循环做的一切,所以如果有人有更好的想法,那就太好了。 澄清:我按订单号搜索数据库,并为每个数据库拉回qty_ord,box_ct和item_no。在某些订单上有多个商品。因此,对于每个项目,我需要将qty_ord乘以box_ct = count,对于该特定项目,我需要根据我的计数迭代循环。现在如果我删除foreach并硬编码for循环计数变量,它工作正常。关于我的foreach有什么问题的任何想法?

qty_ord | box_ct | item_no
------------------------
1          2        10001
3          3        10002
2          1        10003
2          3        10004
2          6        10005

以下是我的代码。

$sql ="SELECT imitmidx_sql.box_ct, oeordlin_sql.item_no, oeordlin_sql.qty_ord
                    FROM imitmidx_sql 
                    JOIN oeordlin_sql ON oeordlin_sql.item_no = imitmidx_sql.item_no WHERE ord_no ='$orderNum'";

            $query = odbc_exec($conn, $sql);

            $row7 = odbc_fetch_array($query);

            foreach($row7['item_no'] as $item){
                $count = $row7['qty_ord'] * $row7['box_ct'];

                    for($counter = 0; $counter <= $count; $counter++){
                        //GRAB NUMBER FROM FILE 
                        $sscc = file_get_contents("ucc128.txt");
                        //INCREMENT NUMBER
                        $sscc++;
                        //PUT THE NUMBER BACK IN FILE
                        $sscc = file_put_contents("ucc128.txt", $sscc);
                        //COMBINE STATIC NUMBER AND NUMBER FROM FILE 
                        $ssccnumber = "00950000".$sscc;
                        //CREATE CHECK DIGIT MATH
                        $ssccnumArray = str_split((string)$ssccnumber);
                        $ssccstep1 = array_combine(range(1, count($ssccnumArray)), $ssccnumArray);

                        $ssccstep2 = 0;
                        $ssccstep4 = 0;
                        foreach($ssccnumArray as $k => $v){
                            if($k%2){
                                $ssccstep2 += (int)$v;
                            }else{
                                $ssccstep4 += (int)$v;
                            }
                        }

                        $ssccstep3 = (int)$ssccstep2 * 3;
                        $ssccstep5 = (int)$ssccstep3 + (int)$step4;
                        $ssccCheckDigit = (ceil($ssccstep5 / 10) * 10) - $ssccstep5;
                        //END CREATE CHECK DIGIT
                        //CONCATENATE FULL NUMBER    
                        $sscc1 = $ssccnumber.$ssccCheckDigit;

                        $sql = "INSERT INTO ucc128 (sscc, ord_no) VALUES ('$sscc1' ,'$orderNum')";
                        #echo $sql.'<br />';
                        odbc_exec($connPRONUMBER, $sql);
                }
            }

2 个答案:

答案 0 :(得分:0)

I believe your issue may be with the following:

foreach($row7['item_no'] as $item){
    $count = $row7['qty_ord'] * $row7['box_ct'];
    //...
}

This should be:

foreach($row7['item_no'] as $item){
    $count = $item['qty_ord'] * $item['box_ct'];
    //...
}

You are grabbing data from the query results, as opposed to the current row.

答案 1 :(得分:0)

我的foreach不起作用,所以我做的是使用我的SQL查询得到总和。

SELECT SUM(imitmidx_sql.box_ct * oeordlin_sql.qty_ord) AS total
                    FROM imitmidx_sql 
                    JOIN oeordlin_sql ON oeordlin_sql.item_no = imitmidx_sql.item_no WHERE ord_no ='$orderNum'

然后我就可以输出它并将$ row7 ['total']保存到变量$ count。