วันอังคารที่ 29 กรกฎาคม พ.ศ. 2557

ฐานข้อมูล MySQL ตำบล อำเภอ จังหวัด ตอนที่ 1; Thailand Provinces, Amphures, Districts in MySQL Database


***สำหรับท่านที่ไม่ต้องการอ่าน ข้ามไป download ตัวที่แก้ไขแล้วได้เลยครับ

หรือถ้าต้องการที่รวมรหัสไปรษณีย์ไว้ด้วยแล้ว (มีตารางรหัสไปรษณีย์ ทำ relation ไว้กับ ตำบล อำเภอ จังหวัดแล้ว) ก็ไปดู
ตอนที่ 2 ฐานข้อมูล MySQL ตำบล อำเภอ จังหวัด ตอนที่ 2 เพิ่มรหัสไปรษณีย์; Thailand Provinces, Amphures, Districts in MySQL Database - Add Zipcode

เมื่อประมาณ 4 ปีที่แล้ว ต้องทำระบบ ระบบหนึ่งที่เกี่ยวข้องกับฐานข้อมูลรายชื่อวัด ตำบล อำเภอ จังหวัด รหัสไปรษณีย์ ในประเทศไทย จำได้ว่าไปโหลดข้อมูลมาจาก http://www.thaicreate.com/free-web-script/thailand-province-database.html ซึ่งต้องขอขอบพระคุณไว้ ณ โอกาสนี้สำหรับฐานข้อมูลที่ได้แบ่งปันกันมาครับ

แต่หลังจากเอามาแล้วทำการตรวจสอบพบว่า ข้อมูลมีการเพิ่มจังหวัดบึงกาฬแล้ว แต่อำเภอและตำบลกลับยังไม่เพิ่ม จึงต้องทำการเพิ่มข้อมูลดังกล่าวเพื่อให้ฐานข้อมูลมีความสมบูรณ์

เครื่องมือที่ใช้ก็มีประจำเครื่องไว้แล้ว ดังนี้ครับ

  1. MySQL
  2. Phpmyadmin
  3. ฐานข้อมูลตำบล อำเภอ จังหวัด ตัวเดิมที่ยังไม่ได้รับการแก้ไข
(ลง Appserv ไว้ก็ได้ครบครับ ของผม AppServ 2.5.10)

ขั้นตอนที่ 1 สร้างฐานข้อมูล แล้ว import เจ้า .sql ที่โหลดมาได้เข้าไปก่อน จะพบว่า มีการเพิ่มจังหวัดบึงกาฬไปแล้ว

ภาพแสดงจังหวัดบึงกาฬ โดยมีรหัสจังหวัดเป็น 77

จากภาพด้านบน นราธิวาส มีรหัสเป็น 76 ส่วนบึงกาฬ มีรหัส 77

ขั้นตอนที่ 2 ตรวจสอบตาราง amphur ว่ามีอำเภอที่มีจังหวัดที่ 77 หรือไม่
ภาพแสดงขั้นตอนการตรวจสอบอำเภอในจังหวัดบึงกาฬ (province_id = 77)

หลังจากคลิก "ลงมือ" ผลปรากฎว่า
ภาพแสดงผลลัพธ์หลังจากค้น คือ ไม่พบอำเภอที่อ้างอิงรหัสจังหวัดบึงกาฬอยู่เลย

ขั้นตอนที่ 3 ตรวจสอบ fields ข้อมูลของ ตาราง amphur มี schema ดังนี้

  1. AMPHUR_ID = รหัสฐานข้อมูลของอำเภอ ตัวนี้ต้องเป็น auto increment ซึ่งจะ run ต่อเนื่องจากตัวเลขในอำเภอสุดท้าย
  2. AMPHUR_CODE = เป็นรหัสอำเภอ ตอนแรกก็สงสัยเหมือนกันครับ ว่ามันคืออะไร แต่พอจะเดาได้ว่ามันสอดคล้องกับรหัสไปรษณีย์ครับ คือ ตัวเลขใน field นี้มี 4 หลักครับ โดย ตัวเลข 2 หลักแรกจะเป็นตัวเลขรหัสไปรษณีย์ 2 ตัวแรกครับ ส่วน 2 หลักหลังก็รันตามลำดับในแต่ละจังหวัดครับ เช่น อำเภอเมืองนครศรีธรรมราช มี AMPHUR_CODE = 8001 โดย 80 เป็นรหัสจังหวัด ส่วน 01 เป็นอำเภอลำดับต้นๆ ของจังหวัดนครศรีธรรมราช (ที่ใช้คำว่าต้นๆ เพราะหากดูในฐานข้อมูลจริงๆ แล้ว 2 หลักหลังมีการเว้นช่วงไว้ อาจเนื่องจากการสำรวจที่มีแนวโน้มจะเกิดอำเภอในละแวกเดียวกัน จึงต้องเว้นไว้สำหรับอนาคตข้างหน้า)
  3. AMPHUR_NAME = ชื่ออำเภอ
  4. GEO_ID = รหัสฐานข้อมูลของภาค
  5. PROVINCE_ID = รหัสฐานข้อมูลของจังหวัด
จากนั้นก็ไปดูรหัสไปรษณีย์ของจังหวัด บึงกาฬ กันครับ ค้นใน google พบที่นี่ครับ http://www.noplink.com/postcode_pv.php?p=บึงกาฬ

รหัสไปรษณีย์ตำบลอำเภอจังหวัดหมายเหตุ
38150ซางเซกาบึงกาฬ
38150เซกาเซกาบึงกาฬ
38150ท่ากกแดงเซกาบึงกาฬ
38150ท่าสะอาดเซกาบึงกาฬ
38150น้ำจั้นเซกาบึงกาฬ
38150บ้านต้องเซกาบึงกาฬ
38150ป่งไฮเซกาบึงกาฬ
38150โสกก่ามเซกาบึงกาฬ
38150หนองทุ่มเซกาบึงกาฬ
38170คำแก้วโซ่พิสัยบึงกาฬ
38170โซ่โซ่พิสัยบึงกาฬ
38170ถ้ำเจริญโซ่พิสัยบึงกาฬ
38170บัวตูมโซ่พิสัยบึงกาฬ
38170ศรีชมภูโซ่พิสัยบึงกาฬ
38170หนองพันทาโซ่พิสัยบึงกาฬ
38170เหล่าทองโซ่พิสัยบึงกาฬ
38000คำนาดีเมืองบึงกาฬบึงกาฬ
38000โคกก่องเมืองบึงกาฬบึงกาฬ
38000ไคสีเมืองบึงกาฬบึงกาฬ
38000ชัยพรเมืองบึงกาฬบึงกาฬ
38000นาสวรรค์เมืองบึงกาฬบึงกาฬ
38000โนนสมบูรณ์เมืองบึงกาฬบึงกาฬ
38000บึงกาฬเมืองบึงกาฬบึงกาฬ
38000โป่งเปือยเมืองบึงกาฬบึงกาฬ
38000วิศิษฐ์เมืองบึงกาฬบึงกาฬ
38000หนองเข็งเมืองบึงกาฬบึงกาฬ
38000หนองเลิงเมืองบึงกาฬบึงกาฬ
38000หอคำเมืองบึงกาฬบึงกาฬ
38220ดงบังบึงโขงหลงบึงกาฬ
38220ท่าดอกคำบึงโขงหลงบึงกาฬ
38220บึงโขงหลงบึงโขงหลงบึงกาฬ
38220โพธิ์หมากแข้งบึงโขงหลงบึงกาฬ
38000โคกกว้างบุ่งคล้าบึงกาฬ
38000บุ่งคล้าบุ่งคล้าบึงกาฬ
38000หนองเดิ่นบุ่งคล้าบึงกาฬ
38190นากั้งปากคาดบึงกาฬ
38190นาดงปากคาดบึงกาฬ
38190โนนศิลาปากคาดบึงกาฬ
38190ปากคาดปากคาดบึงกาฬ
38190สมสนุกปากคาดบึงกาฬ
38190หนองยองปากคาดบึงกาฬ
38180ดอนหญ้านางพรเจริญบึงกาฬ
38180ป่าแฝกพรเจริญบึงกาฬ
38180พรเจริญพรเจริญบึงกาฬ
38180วังชมภูพรเจริญบึงกาฬ
38180ศรีชมภูพรเจริญบึงกาฬ
38180ศรีสำราญพรเจริญบึงกาฬ
38180หนองหัวช้างพรเจริญบึงกาฬ
38210ชุมภูพรศรีวิไลบึงกาฬ
38210นาสะแบงศรีวิไลบึงกาฬ
38210นาสิงห์ศรีวิไลบึงกาฬ
38210นาแสงศรีวิไลบึงกาฬ
38210ศรีวิไลศรีวิไลบึงกาฬ

จะเห็นว่ารหัสนำหน้า 2 ตัวแรกคือ 38 เมื่อไปดูในฐานข้อมูล พบว่า
ภาพแสดง AMPHUR_CODE ที่ข้าม 38XX ไป

จากภาพเมื่อเราไปดูพบว่ามีการเว้นรหัสนำหน้า 38 ไว้ คือ 37XX แล้วข้ามไป 39XX เลย ดังนั้นเราจึงสามารถเพิ่มอำเภอที่อยู่ในจังหวัดบึงกาฬ (รหัส 38) ได้เลยในขั้นต่อไป

ขั้นตอนที่ 4 ไปสร้างข้อมูลใน Excel ไว้ก่อน

จากภาพใช้ข้อมูลใน wiki เพื่อเรียงลำดับประชากรจากมากไปน้อย จะได้อำเภอตามลำดับที่ถูกต้องครับ แล้วเอาไปวางใน Excel แล้วเติมข้อมูลให้ครบ
ภาพแสดงการสร้างข้อมูลใน Excel 

จากภาพด้านบน GEO_ID = 3 คือรหัสภาคตะวันออกเฉียงเหนือ ส่วน AMPHUR_ID ตัวสุดท้ายคือ 998 ดังนั้นตัวต่อไปคือ 999

จากนั้นให้บันทึกในรูปของ .CSV
ภาพแสดงการบันทึก .CSV

จากนั้นในไฟล์ .csv เราต้องลบหัวตารางออก (ชื่อ field) และปรับตัว encode เป็น utf-8 เพื่อรองรับภาษาไทยที่ถูกต้อง โดยการเปิดไฟล์ .csv ด้วยโปรแกรม Notepadd++ (โหลดได้จาก filehippo.com)
ภาพแสดงข้อมูลที่ลบหัวออกแล้ว

ภาพแสดงการเลือก Encode สำหรับภาษาไทยใน MySQL
เสร็จแล้วก็บันทึก

ขั้นตอนที่ 5 นำเข้าฐานข้อมูล อำเภอ
ภาพแสดงการนำเข้า .csv

ภาพแสดงหลังนำเข้าข้อมูลอำเภอสำเร็จ

ขั้นตอนที่ 6 นำเข้าข้อมูล ตำบล

DISTRICT_ID = 8861 เป็นต้นไป
DISTRICT_CODE = 38XXXYY โดย 38XX มาจากเลขอำเภอของเดิม ส่วน YY เป็นลำดับของตำบล
DISTRICT_NAME = ชื่อตำบล
AMPHUR_ID = 999-1006
PROVINCE_ID = 77
GEO_ID = 3

รู้ดังนี้แล้วก็ไปเตรียมไฟล์ Excel เช่นเดียวกันกับตอนทำอำเภอ ได้มาประมาณนี้
ภาพแสดงการเตรียม Excel ของตำบล

จากนั้นก็บันทึกเป็น .csv แล้ว convert to utf-8 without BOM ตามเดิม แล้ว import ลงในตาราง district

ภาพแสดงข้อมูลตำบลในจังหวัดบึงกาฬ หลัง import แล้ว

ขั้นตอนที่ 7 ลบข้อมูลเดิมที่มีการอ้างอิงผิด ออกไป
ภาพแสดงตัวอย่างการอ้างอิงรหัสจังหวัดจาก 77 เป็น 97

 เป็นอันเสร็จ

ท่านสามารถโหลดฐานข้อมูลที่แก้ไขสมบูรณ์แล้วได้ด้านล่างนี้ครับ







ไม่มีความคิดเห็น:

แสดงความคิดเห็น