pdo循环中的mysql子查询

时间:2017-03-22 17:40:43

标签: php mysql pdo

我有以下pdo查询将csv上传到mysql:

private function loadRecurringData ( $filepath, $table )
{

    //We are going to insert some data into the users table
    $sth = $this->dbcon->prepare(
        "INSERT INTO " . $table . "(cust_acc, cli, charge_date, quantity, wholesale_cost, charge_code,description, retail) 
        VALUES (:cust_acc, :cli, :charge_date, :quantity, :wholesale_cost, :charge_code, :description, 
        (select retail_cost from vw_charge_templates where vw_charge_templates.charge_code = :charge_code))"
    );
    $csv = \League\Csv\Reader::createFromPath( $filepath );
    $nbInsert = $csv->each(function ($row) use (&$sth) {

        //Do not forget to validate your data before inserting it in your database
        $sth->bindValue(':cust_acc', $row[0], \PDO::PARAM_STR);
        $sth->bindValue(':cli', $row[1], \PDO::PARAM_STR);
        $sth->bindValue(':charge_date', $row[2], \PDO::PARAM_STR);
        $sth->bindValue(':quantity', $row[4], \PDO::PARAM_STR);
        $sth->bindValue(':wholesale_cost', $row[5], \PDO::PARAM_STR);
        $sth->bindValue(':charge_code', $row[6], \PDO::PARAM_STR);
        $sth->bindValue(':description', $row[7], \PDO::PARAM_STR);

        return $sth->execute(); //if the function return false then the iteration will stop
     });
}

当第二个表中存在费用代码时,它工作正常,但我需要它在返回false时完成循环,以便我可以加载整个文档并稍后检查缺少的信息。我已经尝试了各种情况,if / else语句而不是ins,但我不能正确地使用语法,它总是停在我的虚假代码上。

请帮忙

编辑:

我认为存在误解。这是应该的过程:

1:PHP将文件上传到循环中并写入准备好的语句。

2:每次迭代时子查询

select retail_cost from vw_charge_templates where vw_charge_templates.charge_code = :charge_code

查找表中已加载文件中的当前费用代码(vw_charge_templates),并从该行中选择要插入此查询的费率

3:查询很满意并将所有数据插入$ table。

如果子查询可以在第二个表中找到charge_code,这可以正常工作,例如该文件包含收费代码'ABC',它在tbale中找到'ABC',每个人都很高兴。

如果存在charge_code,这将迭代尽可能多的行。

如果我组成一个代码'xyz'而不管csv上的哪一行我把它迭代将停止因为循环返回false(因为它是设计 - 而不是我)这个cna是第7行,或者第345行并且它完美地插入了所有行。

我需要的是子查询中的条件,以检查第二个表中的charge_code,如果代码不存在则替换值。这是关于子查询的问题,而不是循环。

0 个答案:

没有答案