php

2010-09-23 13 views
7

का उपयोग कर mysql डेटाबेस में बड़ी सीएसवी फ़ाइल आयात करें मेरे पास एक बहुत बड़ी सीएसवी फ़ाइल (150 एमबी) है। इसे MySQL में आयात करने का सबसे अच्छा तरीका क्या है? मुझे इसे MySQL तालिका में डालने से पहले PHP में कुछ हेरफेर करना है।php

+0

http://stackoverflow.com/a/22744300/2037323 पर मेरे समाधान जो कुछ तुलना भी –

उत्तर

6

आप MySQL में LOAD DATA INFILE पर एक नज़र डाल सकते हैं।

पहले PHP में इसे पढ़ने के बजाय, डेटा MySQL में लोड होने के बाद आप हेरफेर करने में सक्षम हो सकते हैं।

INSERT INTO targettable (x, y, z) 
SELECT foo(x), bar(y), z 
FROM temptable 
+0

+ 1 डेटा लोड INFILE के लिए भी शामिल है की जाँच करें। यदि आप phpmyadmin (स्पष्ट रूप से PHP :) का उपयोग करते हैं तो आप आसानी से कई विधियों की तुलना कर सकते हैं, सबसे लोकप्रिय: अपने सभी अलग-अलग तर्कों और पैरामीटर के साथ डेटा इन्फ्लो को चुनें और लोड करें। आप करेंगे जो आपके लिए सबसे अच्छा है। सबसे अधिक संभावना है कि यह लोड डेटा इन्फाइल –

+0

मैनिपुलेशन की मात्रा के आधार पर उसे डेटा में करना होगा, इसे पहले php में पढ़ने और एक पंक्ति में एक पंक्ति डालने के लिए और अधिक संभव हो सकता है। यदि हेरफेर की मात्रा महत्वपूर्ण है तो इसे किसी भी स्क्रिप्ट में करने के लिए और अधिक कुशल है और फिर उसके पास दो ऑपरेशन हैं। 1. लोड डेटा इन्फाइल के साथ और फिर 2. अद्यतन तालिका प्रश्नों के साथ। – thomasmalt

3

मैं सिर्फ fopen के साथ इसे खोलने के लिए और प्रत्येक पंक्ति को पढ़ने के लिए fgetcsv का प्रयोग करेंगे: पहला स्टोर अस्थायी तालिका में कच्चे डेटा डेटा लोड INFILE का उपयोग कर, तो डेटा लक्ष्य तालिका में निम्नलिखित की तरह एक कथन का उपयोग बदलने एक सरणी में छद्म php इस प्रकार है:

mysql_connect(//connect to db); 

$filehandle = fopen("/path/to/file.csv", "r"); 
while (($data = fgetcsv($filehandle, 1000, ",")) !== FALSE) { 
    // $data is an array 
    // do your parsing here and insert into table 
} 

fclose($filehandle)