【问题标题】:ZF2 Bulk insert using INSERT INTO .... SELECT from a table to same tableZF2 Bulk insert using INSERT INTO .... SELECT 从一个表到同一个表
【发布时间】:2015-08-15 15:46:55
【问题描述】:

我正在尝试将表中的一些记录批量复制到同一个表中,其中一个字段已更改。但我无法在 ZF2 中找到正确的方法。

我现有的表格如下所示: CoID -- CatCode -- CategoryName

PP -- 自动 -- 自动

PP -- 山 -- 地铁

PP -- 出租车 -- 出租车

我想运行这个 SQL 查询:

插入到 expcatmaster select 'RY', CatCode, CategoryName from expcatmaster where CoID = 'PP'

我无法找到将常量“RY”放入代码中的方法(使用 ZF2)。 我的 CopyCategoryTable.php 中的代码如下:

public function insCategory($FromCoID, $ToCoID) {
    $SelCol = array(
        'CoID',
        'CatCode',
        'CategoryName',
    );

    $adapter = $this->tableGateway->getAdapter();
    $sql = new Sql($adapter);
    $SelQry =$sql->select();
    $SelQry->columns($SelCol);
    $SelQry->from('ExpcatMaster');
    $SelQry->where(array('CoID' => $FromCoID));
    echo $SelQry->getSqlString();

    $InsQry = $sql->insert();
    $InsQry->into('ExpcatMaster');
    $InsQry->select($SelQry);
    $InsData = $sql->prepareStatementForSqlObject($InsQry);
    echo $InsQry->getSqlString();

    $this->tableGateway = $InsData->execute();

}

如何将选择表中 CoID 的实际值替换为已传递给函数的 $ToCoID?尝试谷歌并在此论坛中搜索,但似乎无法解决。

【问题讨论】:

    标签: php zend-framework2 bulkinsert insert-into


    【解决方案1】:

    ZF(Zend\Db)中没有批量插入的方法, 所以你必须为此编写一个方法。

    Zend\Db\Sql\Sql multiple batch inserts

    MySQL 支持批量插入,但并非所有数据库都支持... 检查链接上的讨论。

    您可以针对这种情况执行原始 SQL 查询:

    $parameters = ['name 1', 'desc 1', 'name 2', 'desc 2'];
    $sql        = 'INSERT INTO table (name, description) VALUES (?, ?), (?, ?);';
    $resultSet  = $this->adapter->query($sql, $parameters);
    
    return $resultSet->getAffectedRows();
    

    【讨论】:

    • 嗨。如果我们有大量的行要从一个表复制到另一个表,那会不会很慢?在我的代码中,正在正确生成 SQL 查询(它的 MySQL),但它没有执行。我可以采用相同的查询并在 phpmyadmin 的查询管理器中运行它,它可以工作。但在 ZF2 中它不会执行。
    • 好的,我使用了原始 SQL 查询并放入了 Insert Into ... Select 查询以进行批量插入。感谢您指出出路。
    • 我不知道如何“批准”。 (对不起,我是stackoverflow的新手)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多