
ผมมีเรื่องจะเล่าให้ฟัง ผมได้ออกแบบฐานข้อมูลตัว มีตารางชื่อ tbl_order มีฟิลด์ๆหนึ่ง ชื่อ order_status ทำหน้าที่เก็บสถานะของใบออเดอร์ ผมจะเก็บ back-order-1,back-order-2,back-order-3 ไปเรื่อยๆ
คำสั่งที่ใช้สำหรับดึงข้อมูลออกจากฐานข้อมูล พร้อมทั้งจัดเรียงมันออกมาด้วยนั้น เขาใช้คำสั่ง order by ข้อมูลที่ถูกจัดเรียงนั้น สามารถกำหนดให้เรียงมากไปหาน้อย หรือน้อยไปหามากก็ได้ ถ้าเป็นตัวอักษรน้อยไปหามาก มันก็จะเรียงจาก a-z ถ้าเป็นตัวเลข ก็จะเรียงจาก 0 ขึ้นไปเรื่อยๆ
ทีนี้มันมีปัญหาอยู่ว่า ถ้าเราต้องการ ให้ bangkok มันขึ้นก่อน แล้วค่อยเป็น Sandnes แล้วจึงเป็น Indo
เวลาที่เราเขียนโปรแกรมเพื่อจะแก้ปัญหาอะไรสักอย่าง เรามักจะนึกถึงแต่่ฟังก์ชั่นของ PHP จนบางครั้งเราลืมไปว่า MySQL นั้นไม่ได้มีแต่คำสั่ง select,update,delete
ผมสร้างตาราง administrator มาตัวหนึ่ง มีฟิลด์หนึ่ง ชื่อ active ผมให้เก็บค่า 1 (active) กับค่า null (non-active) ปกติแล้วผมสนใจแต่คนที่ active อยู่เท่านั้น ปัญหาเลยไม่เจอ มาเมื่อไม่กี่วันนี้เอง อยากรู้รายชื่อของคนที่ non-active อยู่ ผมใช้คำสั่งนี้เลย
คำสั่ง join ของภาษา SQL นั้นใช้สำหรับดึงข้อมูลออกมาจากตาราง ตั้งแต่ 2 ตารางขึ้นไป (ขึ้นไปนะครับ นั่นหมายความว่าคุณจะ join กันกี่ตารางก็ได้ แต่แนะนำว่า อย่าเยอะมากเดี๋ยวโปรแกรมจะช้า) โดยอาศัยความสัมพันธ์ระหว่าง primary key และ foreign key primary key ก็คือฟิลด์ที่มีค่าไม่ซ้ำกันเลย foreign key ก็คือฟิลด์ที่เก็บ primary key ของอีกตาราง ใช้สำหรับสร้างความสัมพันธ์ของข้อมูลระหว่าง 2 ตาราง
Live Demo ผมเจอบ่อยเมื่อท่องไปตามเว็บบอร์ด php ต่างๆ แบบประมาณว่าอยากจะให้ เมื่อเลือกจังหวัดแล้ว รายการในช่องอำเภอ จะแสดงเฉพาะของจังหวัดนั้นๆ จะเขียนเป็นบทความเต็มๆ ก็รู้สึกว่ามันยาว ก็เลยทำเป็นไฟล์ตัวอย่าง แล้วให้ท่านดาวน์โหลดไปเกะ ไปเกากัน ถ้าหากมีปัญหา หรือไม่เข้าใจโค้ดตรงไหน ก็ค่อยมาโพสต์ถามกันที่นี่ ผมก็จะอธิบายไปตรงที่ไม่เข้าใจ ดาวน์โหลดไฟล์ ในไฟล์ .rar ที่ท่านดาวน์โหลดไปผมได้ใส่โครงสร้างฐานข้อมูล ไปให้ด้วย ให้ท่านสร้างฐานข้อมูลชื่อ db_tutorial แล้ว import ไฟล์ db_tutorial.sql เข้าไป ในไฟล์นี้ผมให้สร้าง table พร้อมทั้งข้อมูลตัวอย่างด้วย ถ้า mysql ของท่าน มีรหัสผ่าน และไม่ได้ใช้ root ล้อกอิน ก็ให้ไปแก้ข้อมูลที่ไฟล์ Connection\connection.php ในไฟล์นี้จะเก็บข้อมูลในการเชื่อมต่อฐานข้อมูล หลังจากนั้นลองรันโค้ด index.php ดูและลองเล่นครับ แล้วค่อยลองเปิดดูโค้ดศึกษา มีปัญหาปรึกษาที่นี่
การ join กันมากกว่า 2 ตารางนั้น ไม่ได้มีอะไรยุ่งยากอย่างที่คิด วิธีการก็แค่ เขียน join ต่อกันไปเรื่อยๆ ยกตัวอย่างนะครับ ถ้าสมมติว่า ผมมี ตารางในฐานข้อมูล อยู่ 3 ตาราง คือ province , amphur , tumbol เก็บ จังหวัด อำเภอ ตำบล ตามลำดับ และทีนี้ ผมต้องการ เอารายชื่อตำบลมาแสดง โดยให้แสดงจังหวัด และอำเภอ ด้วย ซึ่งจังหวัดและอำเภอนั้น ก็เก็บแยกกันไว้ ตามตารางด้านบน งานนี้เลยต้อง join กัน 3 ตาราง