我已經把我當前的代碼(不要太多),這個網頁上,供大家參考(減去真正的密碼,當然):http://mafgiftshop.org/MAF/queue/MP/for-reference.phpPHP和MySQL:導入CSV使用列值表
$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 「,」2012年1月12日「,」8008「,」8008基金說明「
- 」$ 38「,」$ 1,000「,」3/31/2012「,」9102「,」9102基金說明「
- 「$ 21」,「$ 1,000」,「2012年4月6日」,「9102」,「9102基金說明」
我需要做的是添加'GiftAmount'列,而FundIDs是相同的並將結果放入MySQL數據庫。因此,對於上面的數據,這裏將是由此產生的MySQL表:
- 「$ 92」| 「$ 500」| 「8008」| 「8008基金說明」(注意GiftDate不再需要)
- 「$ 59」| 「$ 1,000」| 「9102」| 「9102基金說明」
我正在使用PHP來完成此操作,並且PHP文件將每天在Cron作業中運行,因爲CSV文件將根據新的禮物每天更改爲不同的基金。
順便說一下,CSV文件目前有8,794行和許多許多FundID。
看起來你所需要的只是一個帶有「GROUP BY」的SUM(GiftAmount)。你使用什麼查詢? – Kermit
@njk它來自csv而不是mysql數據庫。 – Pitchinnate
你可以做兩件事之一。在PHP方面,如果它是相同的基金,將會添加設置邏輯。這隻會在順序時才起作用,否則你需要一個數組。在SQL方面,您創建一個臨時表,在那裏執行計算並插入到生產表中。 – Kermit