簡體   English   中英

PHP和MySQL:使用列值作為表導入CSV

[英]PHP and MySQL: Import CSV using Column Value as table

我在頁面上放置了我當前的代碼(不多),以供您參考(當然要減去真實密碼): 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是一個數字列,並且您沒有將其存儲為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM