PHP 和 MySQL : Import CSV using Column Value as table

标签 php mysql database csv import

我已将我当前的代码(不多)放在此页面上供您引用(当然,减去真实密码):http://mafgiftshop.org/MAF/queue/MP/for-reference.php

    $delimiter = ',';
$db = new mysqli('localhost', 'mafgifts_mp', '******', 'mafgifts_mp');

if (($handle = fopen("mpdata.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        foreach($data as $i => $content) {
            $data[$i] = $db->real_escape_string($content);
        }
        echo $data[$i]."";
        $db->query("INSERT INTO `MP` 
                      (GiftAmount,GoalAmount,GiftDate,FundID,FundDescription) 
                      VALUES('" . implode("','", $data) . "');");
    }
    fclose($handle);
}

//THE ABOVE CODE PROPERLY PUTS ALL THE DATA INTO THE MySQL DATABASE, BUT I'M NOT 
//ABLE TO DO THE CALCULATIONS I WANT AND INSERT ONLY THE RESULTING DATA.

所以我有一个包含 5 列信息的 CSV 文件。没有空白值。例如:

GiftAmount、GoalAmount、GiftDate、FundID、FundDescription(此行不在 CSV 中;仅供引用)

  • "$10"、"$500"、"1/1/2012"、"8008"、"8008基金说明"
  • "$20"、"$500"、"2/10/2012"、"8008"、"8008基金说明"
  • "$62"、"$500"、"1/12/2012"、"8008"、"8008基金说明"
  • “38 美元”、“1,000 美元”、“2012 年 3 月 31 日”、“9102”、“9102 基金说明”
  • “21 美元”、“1,000 美元”、“2012 年 4 月 6 日”、“9102”、“9102 基金说明”

我需要做的是在 FundID 相同的情况下添加“GiftAmount”列,并将结果放入 MySQL 数据库中。因此,对于上述数据,生成的 MySQL 表如下:

  • “92 美元”| “500 美元”| “8008”| “8008基金说明”(注意不再需要GiftDate)
  • “59 美元”| “1,000 美元”| “9102”| 《9102基金简介》

我使用 PHP 来完成此任务,并且 PHP 文件将每天在 Cron 作业中运行,因为 CSV 文件将根据不同基金的新礼物每天进行更改。

顺便说一句,CSV 文件目前有 8,794 行和很多很多 FundID。

最佳答案

我会将 FundID 设置为 MYSQL 中的唯一键,然后使用 INSERT INTO ... ON DUPLICATE KEY UPDATE查询。

    $db->query("INSERT INTO `MP` (GiftAmount,GoalAmount,GiftDate,FundID,FundDescription) VALUES('" . implode("','", $data) . "') ON DUPLICATE KEY UPDATE GiftAmount=GiftAmount+".intval($data[0]).";");

这假设 GiftAmount 是数字列,并且您没有将其存储为字符串。

关于PHP 和 MySQL : Import CSV using Column Value as table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690987/

相关文章:

php - 创建个性 URL

php - 使用 sql 表中的数据创建 php/html 表的术语,但 php 表值是根据 sql 数据计算的

mysql - 如何正确编写带有 WHERE 子句的 sql 查询?

python - 动态添加字段的 django 表单集可以具有持久数据吗?

php - 使用 PDO 将行从一个数据库中的表移动到另一个数据库

php - mysqli 根据行ID值显示数据

php - WordPress - 带有类别列表的主题选项页面

php - 使用 mysqli_* 连接时 aura/sqlquery 中的变量绑定(bind)

php - 合并两个 MySQL 表但希望一列等于另一列

mysql - 编写 mysql 查询的想法