Использование связанных параметров из двух операторов выбора и использование их в одной вставке - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь выяснить, как взять связанные значения параметров из двух разных операторов выбора и вставить их в новую таблицу.

Мой первый выбор получает массив без проблем.Мой второй выбор получает счетчик, а также число 180, разделенное на счетчик, но использует возвращенные значения из первого выбора в предложении where.

Все это прекрасно работает.

Теперь,основываясь на выполнении каждого второго выбора, я хочу вставить значения из каждого выбора в одну новую таблицу.

Я связываю значения каждого выбора по отдельности, но как я могу связать значения из обоих выборов свыполнить мою вставку на них?

$selectPLC = "
    SELECT 
        sku_id, s.frm as frm, sg.code as code, s.matrl as matrl, s.color as color, cst
    FROM plc;
";

try {
    $PLCcheck = $MysqlConn->prepare($selectPLC);
    $detailRslt = $PLCcheck->execute();

     while ($PLCRow = $PLCcheck->fetch(PDO::FETCH_ASSOC)) {

        print_r($PLCRow); //This prints the first array I need

        $salesValues = [
        ":cst" => $PLCRow["cst"],
        ":frm" => $PLCRow["frm"],
        ":matrl" => $PLCRow["matrl"],
        ":color" => $PLCRow["color"]

        ];

        $checkSales = "
            SELECT
            count(*) as salesCount,
            180/count(*) as countDIV
            FROM orders
                WHERE cstnoc = :cst
                AND frmc = :frm
                AND covr1c = :matrl
                AND colr1c = :color
                AND date(substr(dateField1,1,4)||'-'||substr(dateField1,5,2)||'-'||substr(dateField1,7,2) ) between current_Date - 180 DAY AND current_Date
        ";

        try{
            $salesCheck = $DB2Conn->prepare($checkSales);
            $salesResult = $salesCheck->execute($salesValues);

            while ($salesRow = $salesCheck->fetch(PDO::FETCH_ASSOC)) {

                print_r($salesRow); //This prints the 2nd array I need

                $countValues = [
                    ":salesCount" => $salesRow["salesCount"],
                    ":countDiv" => $salesRow["countDiv"]
                ];

                $insertSales = "

                    INSERT INTO metrics (cst, frm, matrl, color, salesCount, countDIV )
                    VALUES (
                        :cst, //from first array
                        :frm, //from first array
                        :matrl, //from first array
                        :color, //from first array
                        :salesCount, //from 2nd array
                        :countDiv //from 2nd array
                    )
                ";

                $salesInsertPrep = $DB2Conn->prepare($insertSales);
                $salesInsertExec = $salesInsertPrep->execute($countValues);
            }

        }catch(PDOException $ex) {
            echo "QUERY TWO FAILED!: " .$ex->getMessage(); 
        }
    }

}catch(PDOException $ex) {
    echo "QUERY ONE FAILED!: " .$ex->getMessage();
}

1 Ответ

0 голосов
/ 25 сентября 2018

Когда вы выбираете второй набор значений массива, а не добавляете их в новый массив, вы можете добавить их в массив первых значений, поэтому вместо ...

       $countValues = [
            ":salesCount" => $salesRow["salesCount"],
            ":countDiv" => $salesRow["countDiv"]
        ];

используйте

$salesValues[":salesCount"] = $salesRow["salesCount"];
$salesValues[":countDiv"] = $salesRow["countDiv"];

, а затем ...

$salesInsertExec = $salesInsertPrep->execute($salesValues);

Другое дело, что вы можете подготовить вставку один раз вне цикла и затем выполнять ее каждый раз в цикле, так что это будетпохож ...

    $insertSales = "
                INSERT INTO metrics (cst, frm, matrl, color, salesCount, countDIV )
                VALUES (
                    :cst, //from first array
                    :frm, //from first array
                    :matrl, //from first array
                    :color, //from first array
                    :salesCount, //from 2nd array
                    :countDiv //from 2nd array
                )
            ";

    $salesInsertPrep = $DB2Conn->prepare($insertSales);
    while ($salesRow = $salesCheck->fetch(PDO::FETCH_ASSOC)) {

        print_r($salesRow); //This prints the 2nd array I need

        $salesValues[":salesCount"] = $salesRow["salesCount"];
        $salesValues[":countDiv"] = $salesRow["countDiv"];
        $salesInsertExec = $salesInsertPrep->execute($salesValues);
   }
...