基本上,我想从上到下浏览整个表格。如果该项已存在,请使用新数据更新该行。如果没有,请将数据附加到表中。我该如何实现呢?谢谢
更新:在原始查询中这很简单,但是,我在MVC架构上使用它。
答案 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());
}
}