【问题标题】:Increment column value if duplicate value found [duplicate]如果发现重复值,则增加列值 [重复]
【发布时间】:2020-03-07 19:44:42
【问题描述】:

我有一个非常简单的脚本,它可以导入邮政编码的 CSV 文件并用它在表格中创建一行。

我还有一个列来存储total Postcode 在 CSV 文件中出现的次数。

如果发现重复的邮政编码,是否可以增加列值?

因此,如果有 2 个 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;
    }

}

【问题讨论】:

  • ON DUPLICATE ...

标签: php mysql sql


【解决方案1】:

MySQL 允许您使用以下语句(目前无法检查语法,但您会发现它在互联网上有很好的记录):

INSERT ... ON DUPLICATE KEY UPDATE...

这意味着,尝试将行插入到具有特定列作为唯一键的表中,如果存在具有相同键值的行,则执行更新部分。

因此,如果您将列 post code 定义为唯一索引,则上述构造将完全按照您的要求进行。

【讨论】:

  • 非常感谢您对此的详细回复 - 我将很快奖励一个绿色勾号:-)
  • 不客气,谢谢。
【解决方案2】:

您需要先进行选择以检查您要输入的邮政编码是否已经存在,如果存在,请获取计数并根据该邮政编码进行更新。

【讨论】:

  • 如果你有并发请求,这是不安全的。
  • 没有一个 OPs 代码是安全的。这是给OP去学习的建议!
  • @Stuart 谢谢。我意识到现阶段还没有准备好生产 - 感谢您的意见:)
  • @Stuart 非常感谢您的帮助,Stuart - 在保护从 CSV 到我的 SQL 数据库的任何数据输入时,我会非常小心:)
  • 一切都好@michaelmcgurk - FDavidov 的解决方案要好得多!
猜你喜欢
  • 2023-02-04
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多