我在页面上放置了当前代码(不多),以供您参考(当然要减去实际密码):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是一个数字列,并且您没有将其存储为字符串。