2016-11-21 51 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