【问题标题】:How to rewrite the same mysql table row if the item already exists?如果项目已经存在,如何重写相同的mysql表行?
【发布时间】:2014-06-18 13:45:35
【问题描述】:

基本上,我想从上到下遍历整个表格。如果该项目已存在,则使用新数据更新该行。如果没有,请将数据附加到表中。我该如何实施呢?谢谢

更新:这在原始查询中很简单,但是,我在 MVC 架构上使用它。

【问题讨论】:

标签: php mysql magento csv


【解决方案1】:

这里我可以建议使用magento内置函数insertOnDuplicate

 $bind = array(
           'product_link_attribute_id' => $attributeInfo['id'],
           'link_id'                   => $linkId,
           'value'                     => $value
              );

$adapter->insertOnDuplicate($attributeTable, $bind, array('value'));

其中$bind 是您要插入的数组或行值,函数中的第三个参数应为array('value'),这将是您要检查值是否已存在于具有相同值的表中的列列表。

你也可以在下面的文件中找到这个方法的实现

lib\Varien\Db\Adapter\Pdo\Mysql.php

希望这对你有帮助。

【讨论】:

  • $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');所以类似的东西可以让我遍历数据库表并仅在重复时插入?那么,它如何确定这是一个重复的列?我想检查 Sku 列是否已经具有相同的值,然后用新数据覆盖整行
  • 是的,您可以按照我的回答中的描述将其添加为array('value'),将其更改为array('sku'),因此如果您已经存在sku,那么它将根据您的数据更新行。
  • 知道如何截断模块的数据库表吗?
  • 你可以使用这个$this->_db->query('TRUNCATE '. $this->_table);$this->_db你的数据库连接对象。如果你投票支持我的 ans 以便将来有人可以使用,我会很高兴
  • 这正是我最终使用的。我也可以遍历集合并删除每个项目,但它不会像 truncate 那样重置自动增量。
【解决方案2】:

如果键存在,REPLACE 命令将删除该行,然后插入相同的信息。

这意味着任何自动增量键在执行操作后都会被更改,因为它不是同一行。这是一个新的,包含先前删除的行中的确切信息。

【讨论】:

    【解决方案3】:

    请检查此代码:

    function sendtodb($data) {
        $invoiceid = $data['invoiceid'];
        if($invoiceid != "") {
            $checkinvoice = mysql_query("SELECT * FROM `paypal_ajustment_data_pure` WHERE `InvoiceID`='$invoiceid'") or die(mysql_error());
            if(mysql_num_rows($checkinvoice) > 0) {
                $paypalreferenceid = $data['paypalreferenceid'];
                $checkpreferenceid =  mysql_query("SELECT * FROM `paypal_ajustment_data_pure` WHERE `InvoiceID`='$invoiceid' AND `PayPalReferenceID`='$paypalreferenceid'") or die(mysql_error());  
                if(mysql_num_rows($checkpreferenceid) == 0)
                    $updatereferncceid = mysql_query("UPDATE `paypal_ajustment_data_pure` SET `PayPalReferenceID`='$paypalreferenceid' WHERE `InvoiceID`='$invoiceid'") or die(mysql_error());
            }
            else {
                mysql_query("INSERT INTO `nume_mage`.`paypal_ajustment_data_pure` (`id`, `TransactionID`, `InvoiceID`, `PayPalReferenceID`, `TransactionInitiationDate`, `TransactionCompletionDate`, `status`) VALUES (NULL, '$data[TransactionID]', '$data[invoiceid]', '$data[paypalreferenceid]', '$data[transactionintiationdate]', '$data[transactioncompletedate]', '1')") or die(mysql_error());
            }
            mysql_query("update `paypal_ajustment_data` set status=2 where id= '$data[id]'") or die(mysql_error());
        }
        else {
            mysql_query("update `paypal_ajustment_data` set status=3 where id= '$data[id]'") or die(mysql_error());
        }
    }
    

    【讨论】:

    • 这段代码不适合你,但这只是为了理解逻辑。我可以展示逻辑,所以你可以理解代码让我知道你的表名
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 2017-01-04
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多