php - 如何在没有 'on duplicate key update' 的情况下使用 insertFromSelect(...) ?

标签 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() 函数的定义?或者,也许还有另一种方法可以做到这一点?

最佳答案

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

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

关于php - 如何在没有 'on duplicate key update' 的情况下使用 insertFromSelect(...) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414932/

相关文章:

php - 不能在常量中使用字符串连接?

PHP检测输入的时间戳范围是否大于一天

mysql - 将一个表中的列中的值复制到另一个表中另一个值与 MySQL 匹配的列

mysql - 如何实现3+条记录之间的交叉引用?

.htaccess - 使用 htaccess 进行 Magento 重定向

Magento 免运费按总计计算

mysql - Magento 版本。 1.9.1.0 : Sort Products by Quantity and Price descending

php - 如何使 ZEND_BEGIN_ARG_INFO_EX 控制传递给 PHP 扩展的参数数量?

php - 返回周零数据

c# - 禁用 asp.net mvc 成员资格和角色表创建