如果项目已经存在,如何重写相同的mysql表行?

时间:2014-05-01 23:46:14

标签: php mysql magento csv

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

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

3 个答案:

答案 0 :(得分: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

希望这对您有所帮助。

答案 1 :(得分:0)

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

这意味着执行操作后将更改任何自动增量键,因为它不是同一行。它是一个新的,具有来自预先删除的行的确切信息。

答案 2 :(得分:-1)

请检查此代码:

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());
    }
}