2016-11-21 48 views
-1

我有一個非常簡單的腳本,它導入Postcodes的CSV並在表格中用它創建一行。如果找到重複值,則增加列值

我還有一列存儲郵政編碼出現在CSV文件中的total次數。

如果找到重複的郵政編碼,是否可以遞增列值?

因此,如果有兩個實例w1a 1aa它會增加總列中的值。例如:

id | postcode | total 
0 | w1a 1aa | 2 
1 | g74 1bc | 1 
2 | ml10 6qd | 1 

非常感謝任何幫助。

 

表:

id | postcode | total 

PHP:

// connect to db 
$servername = "localhost"; 
$username = ""; 
$password = ""; 
$dbname = "postcodes"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

foreach($csv as $row) { 

    $postcode = $row[0]; 

    $sql = 'INSERT INTO postcodes VALUES (NULL, "'.$postcode.'", 1)'; 

    if (mysqli_query($conn, $sql)) { 
     echo "New record created successfully"; 
    } else { 
     echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

} 
+5

'ON DUPLICATE' ... –

回答

1

MySQL允許你那句像下面這樣(無法進行語法檢查的權利,但你會發現它很好的互聯網文件):

INSERT ... ON DUPLICATE KEY UPDATE... 

這意味着,試圖插入行一個具有特定列作爲唯一鍵的表,如果一行存在相同的鍵值,則它執行更新部分。

因此,如果您將列後的代碼定義爲唯一索引,則上述構造將完全按照您的要求進行操作。

+0

非常感謝您對此的詳細回覆 - 我將很快頒發綠色標記:-) – michaelmcgurk

+1

歡迎您和您的光臨。 – FDavidov

0

你需要做一個選擇首先要檢查,如果你是對郵政編碼進入已經存在,如果是這樣的話,可以根據該郵編獲取計數並更新它。

+1

如果您有併發請求,這是不安全的。 –

+1

任何OP代碼都是安全的。這是OP的建議去學習! – Stuart

+0

@Stuart謝謝。我意識到它在這個階段不是生產準備 - 感謝您的輸入:) – michaelmcgurk