INNER JOIN
หน้าแรก PHP MySQL เกร็ดความรู้ INNER JOIN
| เมื่อวานโดนสถานการณ์ตรอกข้าวสารทำให้การอัพเดตเนื้อหาชะงัก แต่จริงๆ ก็อัพเดตได้ยาวพอสมควรละครับ เลยคิดว่าสมควรแก่การไปเดินซื้อหาของ... อุตส่าห์ถ่อไปไกลถึงตรอกข้าวสาร แต่ฝนก็ตก แถมเดินทั้งตรอก ได้กางเกงขาสั้นมาตัวเดียว คุ้มจริงๆ -_-'' เอาเหอะๆ ถือซะว่าไปเปิดหูเปิดตาตอนกลางคืนที่นานๆ จะได้ไปซะที |
เอาละครับ มาว่ากันต่อ... ในตอนที่แล้วผมได้หยุดเอาไว้ถึงตรงที่ตัวอย่างของการดึงข้อมูลที่มีการอ้างอิงถึงหลายตาราง แต่ค่อยๆ ดึงออกมาทีละตาราง จะเห็นได้ว่าโค้ดที่เขียนออกมาค่อนข้างจะซับซ้อน ยิ่งถ้ามีการอ้างอิงถึงมากตารางเท่าไหร่ ก็จะยิ่งซับซ้อนมากเท่านั้น... เลี่ยงได้ก็ควรเลี่ยงดีกว่าครับ แม้ว่าในความเป็นจริงแล้ว ฐานข้อมูลที่ถูกออกแบบมาดี ก็ไม่ควรจะมีการอ้างอิงถึงตารางให้มากจนเกินไปก็เถอะ คราวนี้เราจะมาลองเขียนโค้ด PHP สำหรับดึงข้อมูลออกมาเหมือนกับโค้ดในตอนที่แล้ว แต่จะใช้วิธีสืบค้นพร้อมกันหลายตารางในคราวเดียว โดยใช้คุณสมบัติ INNER JOIN ของคำสั่ง SQL กันครับ แล้วดูว่ามันทำให้โค้ดซับซ้อนน้อยกว่าขนาดไหน <?php //คราวนี้ลองแบบ INNER JOIN กันบ้าง echo $data['eid']. ":". $data['name']. ":". $data['pos_name']. ":". $data['dept_name']. ":". $data['salary']. "<br>"; } ?> สังเกตนิดหนึ่งว่าผมแยกเขียนคำสั่ง SQL ออกเป็น 3 บรรทัด เพื่อให้อ่านได้สะดวกนะครับ แต่ทุกบรรทัดจะเป็นการพูดถึงตัวแปร $sql เหมือนกัน แต่จะต่างกันตรง บรรทัดแรกจะเป็น $sql = ใช่ไหมครับ แต่ต่อมาผมจะใช้ $sql .= นั่นหมายความเดียวกับ $sql = $sql. "ข้อความต่อเนื่อง" ครับฃ เช่น $a = "ทดสอบ"; กับ $a = "ทดสอบ"; จะได้ผลลัพธ์เมื่อทำการ echo $a; เหมือนกันครับ คือเราจะได้ข้อความว่า ทดสอบการเขียนข้อความต่อเนื่อง เหมือนกัน เอาละ... ทีนี้เรามาดูโค้ดที่เขียนขึ้นดีกว่าครับ สังเกตว่าเราจะได้เหมือนกับการสืบค้นทีละตารางๆ เลยทีเดียว
เห็นไหมครับ... โค้ด PHP จะไม่ซับซ้อนด้วย เพราะไม่ต้องมาวนลูปหลายรอบเพื่อที่จะให้ได้มาซึ่งข้อมูลที่ครบถ้วน และเวลาที่จะแก้ไขอะไร ก็ไปแก้ที่คำสั่ง SQL หลักเพียงอันเดียวครับ LEFT JOIN <?php //คราวนี้ลองแบบ LEFT JOIN กันบ้าง echo $data['eid']. ":". $data['name']. ":". $data['pos_name']. ":". $data['dept_name']. ":". $data['salary']. "<br>"; } ?> ผลที่ได้ก็จะเหมือนกันครับ... มี LEFT JOIN ก็มี RIGHT JOIN เช่นกัน แต่จากคู่มือของ MySQL ระบุเอาไว้ว่า เพื่อความเข้ากันได้ของคำสั่ง SQL ในกรณีที่มีการเปลี่ยนไปใช้ฐานข้อมูลแบบอื่น (ที่ไม่ใช่ MySQL) ควรใช้ LEFT JOIN แทนครับ ดังนั้นผมจึงไม่ขอพูดถึง RIGHT JOIN และจะว่าไปนั้น จริงๆ แล้วผมอยากจะพูดถึงวิธีสุดท้ายมากกว่าครับ... แต่ผมจะเอาไว้กล่าวถึงในตอนหน้า ส่วนตอนนี้ขาลาเพียงเท่านี่ก่อนครับ :) อ้อ ก่อนจากก็อยากบอกก่อนว่า เรื่องของคำสั่ง LEFT JOIN นั้น จริงๆ แล้วมันมีอะไรที่ลึกซึ้งซับซ้อนซ่อนเงื่อนเพื่อนทรยศมากกว่าที่ผมนำมากล่าวถึงนะครับ แต่ผมจะไม่ขอพูดถึงลงไปในเชิงลึก เนื่องจากอย่างที่ผมได้บอกแล้วว่าผมเองก็ไม่ได้เป็นผู้เชี่ยวชาญด้านคำสั่ง SQL (เท่าที่สอนๆ ได้อยู่นี่ ก็ต้องอาศัยศึกษา และมั่วลองผิดลองถูกมาพอสมควรแล้ว) ใครที่สนใจจะศึกษาเชิงลึก เกี่ยวกับเรื่องของคุณสมบัติตระกูล JOIN ของ SQL สำหรับ MySQL แนะนำให้ไปอ่าน documentation จากเว็บได้ตามลิงก์เลยครับ http://dev.mysql.com/doc/mysql/en/JOIN.html |
ขึ้นไปด้านบน

