如何在没有'重复密钥更新'的情况下使用insertFromSelect(...)?

时间:2013-01-19 13:40:18

标签: php mysql magento magento-1.6

我正在修改Createat.php,你可以看到the source here

快速概述:

$select->from(array('o' => $this->getTable('sales/order')), $columns)
  ->join(array('oi' => $selectOrderItem), 'oi.order_id = o.entity_id', array())
  ->where('o.state NOT IN (?)', array(
    Mage_Sales_Model_Order::STATE_PENDING_PAYMENT,
    Mage_Sales_Model_Order::STATE_NEW
  ));
...
$select->where('o.channel_name IS NULL');
$adapter->query($select
  ->insertFromSelect($this->getMainTable(), array_keys($columns)));

所以此时一切都很好。我的sales_order_aggregated_created表现在包含所有“网站”销售总额。

$select->reset('where');
$select->where('o.channel_name = ?', 'Amazon');
$adapter->query($select
  ->insertFromSelect($this->getMainTable(), array_keys($columns)));

这就是我的问题所在,当我重置('where')并过滤另一个channel_name并尝试在表中插入新行时,insertFromSelect()函数正在使用“INSERT ... ON DUPLICATE KEY UPDATE”和从上一个查询中覆盖表中的值。

是否存在$ select-> someFunction(),它不会在重复时更新或在哪里可以找到insertFromSelect()函数的定义?或者,也许有另一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

Varien_Db_Adapter_Interface具有常量INSERT_ON_DUPLICATE,您可以将其作为标志传递给insertFromSelect()以禁用默认的ON DUPLICATE KEY UPDATE行为。

$adapter->query(
    $adapter->insertFromSelect(
        $select,
        $this->getMainTable(),
        array_keys($columns),
        Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE
    )
);