2012-11-04 44 views
0

我正在使用MySQL和PHP。如何在MySQL中使用額外的記錄更新現有表,而不會導致重複?記錄是客戶,每條記錄的關鍵是客戶賬號,如「1234」。如何在MySQL中添加記錄而不會導致重複?

我基本上需要做三件事情。如果他們的客戶帳戶不存在,則添加新的客戶記錄,更新現有客戶的信息(例如他們的電話號碼或電子郵件地址已更改),或刪除客戶記錄(如果他們不再是客戶)。

數據每天都以feed的形式出現,營銷人員希望擁有自己的數據庫並添加自己的字段,這就是爲什麼我不會簡單地從每日feed中重新創建數據庫的原因。目標是使其與Feed保持同步。謝謝!

回答

1

我建議你做所有使用PHP的處理。

當你通過你的客戶記錄循環,如果記錄存在,首先檢查:

$query = "SELECT customer_account_number FROM table WHERE customer_account_number = 1234"; 
$result= $mysql -> query($query); 
$num = $result -> num_rows; 

if($num == 1){ 
    // The record already exists so you update. 
    $update_query = "UPDATE table SET some_field = 'Some Value' WHERE customer_account_number = 1234"; 
    $update_result= $mysqli -> query($update_query); 
}else{ 
    // The record doesn't exist so create a record. 
    $insert_query = "INSERT INTO table (customer_account_number) VALUES (1234)"; 
    $insert_result= $mysqli -> query($insert_query); 
} 

或者,你可以做一個選擇查詢,以獲得客戶的賬號和數組中的彈出他們。

$query = "SELECT customer_account_number FROM table"; 
$result= $mysql -> query($query); 
$num = $result -> num_rows; 

while($row = $result -> fetch_array(MYSQLI_ASSOC)){ 

    $cust_records[] = $row['customer_account_number']; 

} 

// Then for each customer record your looping through. 

if(in_array($customer_record_id, $cust_records)){ 
    // It exists - so just update 
    $update_query = "UPDATE table SET some_field = 'Some Value' WHERE customer_account_number = 1234"; 
    $update_result= $mysqli -> query($update_query); 
}else{ 
    // Doesn't exist - insert 
    $insert_query = "INSERT INTO table (customer_account_number) VALUES (1234)"; 
    $insert_result= $mysqli -> query($insert_query); 
} 

此外,由Tadman建議,如果您確保客戶賬戶號是一個唯一列,然後,將增加額外的保護,以確保副本不能添加。

+0

調用'SELECT *'計數真的不是很酷。不要這樣做。相反,請直接選擇計數。 – tadman

+1

是的 - 這只是一個非常快速的例子。我會更新。 – ajtrichards

+0

計數總是返回一行。 – tadman

0

運行SELECT id FROM table,然後插入並將ID保存爲關聯數組中的鍵。只要設置了密鑰,就可以檢查ID是否存在於數據庫中,並根據該ID進行處理。

如果您刪除每個客戶流程,最終您將留下一系列不再存在的客戶。

執行此操作會節省一些SQL負載。

$result = mysql_query('SELECT id FROM table'); 
$ids = array(); 
while($row = mysql_fetch_assoc($result)){ 
    $ids[$row['id']] = true; 
} 

foreach($objects as $key => $obj) { 
    if($ids[$obj['id']]) { 
    // exists, update! 
    unset($ids[$obj['id']]); 
    } else { 
    // new, insert! 
    } 
} 

// go through the remaining people not added 
for($ids as $deleted_id) { 
    // delete this guy 
} 
0

MySQL支持「重複密鑰更新」語法。
這基本上允許您指定在主鍵(您的帳號)已存在的情況下更新哪些字段,全部在一個SQL語句中。

mysql syntax

你不得不處理刪除一個單獨的SQL語句,因爲這個邏輯幾乎肯定會從你的顧客反饋來的。