我在页面上放置了当前代码(不多),以供您参考(当然要减去实际密码):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”,“ 2012年1月1日”,“ 8008”,“ 8008基金说明”
“ $ 20”,“ $ 500”,“ 2012年2月10日”,“ 8008”,“ 8008基金说明”
“ $ 62”,“ $ 500”,“ 2012年1月12日”,“ 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是一个数字列,并且您没有将其存储为字符串。

10-08 02:37