考虑到您的表格中每个tax_number 都有唯一的价值。您应该将此 tax_number 列设为唯一。
ALTER TABLE `current`
ADD UNIQUE INDEX `tax_number` (`tax_number`);
完成后,您可以使用 mysql INSERT ... ON DUPLICATE KEY UPDATE 功能在单个查询中为给定的 tax_number 插入记录或更新现有记录。
考虑到您有 col1、col2 和 tax_number 作为表中的列,如果此记录已存在,您想要更新 col1。所以mysql查询会是
INSERT INTO `current` (col1, col2, tax_number)
VALUES ('a', 'b', 12345)
ON DUPLICATE KEY UPDATE col1 = 'a';
注意:您的代码容易受到sql injection 的攻击,请确保通过参数绑定将您的代码更新为PDO。
所以php中对应的代码应该是这样的。
$current = simplexml_load_file('http://example.com/simple.xml');
foreach($current->simple as $item){
$query = $db->prepare('INSERT INTO current (currentDocumentNumber, currentTaxNumber, currentIdentity,currentOperationType,currentAmountOfDebt,currentAmountDue,currentAccountDate)
VALUES (:doc_number, :tax_number, :identity, :operation_type, :debt_amount, :due_amount, :date)
ON DUPLICATE KEY UPDATE currentAmountOfDebt = :debt_amount, currentAmountDue = :due_amount');
$query->bindParam(':doc_number', $item->EVRAK_NO, PDO::PARAM_STR);
$query->bindParam(':tax_number', $item->VERGI_NO, PDO::PARAM_INT);
$query->bindParam(':identity', $item->TC_KIMLIK_NO, PDO::PARAM_STR);
$query->bindParam(':operation_type', $item->ISLEM_TURU, PDO::PARAM_INT);
$query->bindParam(':debt_amount', $item->KPB_BTUT, PDO::PARAM_STR);
$query->bindParam(':due_amount', $item->KPB_ATUT, PDO::PARAM_STR);
$query->bindParam(':date', $item->TARIHI, PDO::PARAM_STR);
$query->execute();
}