LOAD DATA by MySQL

เรื่องของเรื่องก็มีอยู่ว่า
ทำเว็บให้ลูกค้าคนหนึ่ง…ลูกค้าคนนี้มีข้อมูลอยู่แล้วเป็น TEXT File ซึ่งจำนวนข้อมูลก็มากโขอยู่ มากสุดอยู่ที่ 150,000 Records ไ้อ้โปรเจคนี้แน่นอนว่า develop ด้วย php ปัญหาเกิดขึ้นตอนที่จะต้องเอาข้อมูลทั้งหมดยัดเข้าไปใส่ใน MySQL จ๊ากกกก เอาไงหว่าจะให้ วน Loop ที่ละบรรทัดแล้ว Insert เข้าไปก็นะ ถึก…โครต สุดท้ายก็มาเจอคำสั่ง LOAD DATA ของ MySQL
LOAD DATA
ปัญหาแรกที่เจอก็คือ
1.เขียนคำสั่ง
ผิดอ่าว กรรม…ตอนแรกก็นึกว่าถูกแล้วเพราะ ไปดูคำสั่งจาก phpmyadmin แก้ไปแก้มาก็พบว่า Path ของไฟล์ บน Linux กับ Windows มันไม่เหมือนกันนี่หว่า… เช่นWINDOWS

\web\data\load_data\data.txt

Unix

/web/data/load_data/data.txt
อ่ะเจอก็แก้ปัญหากันไป ซึ่งไม่ว่าจะเป็น Windows หรือ Unix เราสามารถใช้ฟังก์ชั้น getcwd() ของ php ช่วยดู Current Path ของ Script ที่เราทำงานอยู่ได้

2.เมื่อข้อมูลขึ้นบรรทัดใหม่ ปัญหานี้หนักหนาเอาการ เล่นแก้กันเป็นอาทิตย์ๆๆ ซึ่งที่เจอๆ ก็จะมี เช่น

:
$SQL = “LOAD DATA LOCAL INFILE ‘”.getcwd().”/update/”.$filename.”‘”;
$SQL .= ” INTO TABLE `guarantor` “;
$SQL .= ” FIELDS TERMINATED BY ‘,'”;
$SQL .= ” OPTIONALLY ENCLOSED BY ‘\\\”‘”;
$SQL .= ” LINES TERMINATED BY ‘\\r'”; จะไม่มี\\n
$SQL .= ” IGNORE 1 LINES”;
:
และ

:
$SQL = “LOAD DATA LOCAL INFILE ‘”.getcwd().”/update/”.$filename.”‘”;
$SQL .= ” INTO TABLE `guarantor` “;
$SQL .= ” FIELDS TERMINATED BY ‘,'”;
$SQL .= ” OPTIONALLY ENCLOSED BY ‘\\\”‘”;
$SQL .= ” LINES TERMINATED BY ‘\\r\\n'”; จะต้องมี\\n
$SQL .= ” IGNORE 1 LINES”;
:
แล้วตูจะเลือกใช้ตอนไหนยังไงหว่ะเนี้ย…ไม่รู้ครับ..คงต้องลองกันดู -_-!!!

3. FTP FILE ปัญหานี้เล่นเอา หงุดหงิด ไปทั้งวัน คือเวลาเรา FTP File ขึ้นไปวาง ด้วยโปรแกรม FileZilla คำสั่ง LOAD DATA ไม่สามารถใช้การได้ อ่าว..มีงี้ด้วย คุณต้องลอง FTP ไฟล์โดยผ่านทาง IE กรรมแท้ เล่น งี้ งง เป็นไก่ตาแตกครับพี่น้อง…ซึ่งคาดว่าโปรแกรมอื่นๆ ก็น่าจะเหมือนกัน เช่น CuteFTP
อ่ะยังไงก็ลอง เอาไปใช้เล่นๆ กันดูครับ คาดว่าคงจะมีประโยชน์กันบ้างเน้ออออ ไปละ ไม่ไหว หิวข้าว อ่ะ