การ JOIN ตารางเพื่อดึงค่าตารางที่ 2 มาแสดง บางครั้งในตารางนั้น อาจจะเก็บไอดีอีกที ซึ่งจะต้องดึงจาก ตารางที่ 3 มาแสดงด้วย $this->data['tb_members_member_id_option_list'] = $this->Resume->returnOptionList("tb_members", "userid", "CONCAT_WS(' - ',prefix,firstname,lastname)"); โค้ดด้านบนนี้จะได้แค่เพียงข้อมูลจากตารางที่ 2 ซึ่งคำนำหน้ายังเป็นเพียงไอดี จะต้องเขียน JOIN เพื่อดึงชื่อจากตารางที่ 3 มาแสดงด้วย เปิดไปที่ไฟล์ View เพื่อดูว่าใช้ตัวแปรอะไรรับค่า ในที่นี้คือ tb_members_member_id_option_list เปิดไฟล์ Controller เพื่อค้นหาว่ามีการสร้างตัวแปรนี้ในตำแหน่งไหนบ้าง (ซึ่งปกติแล้วจะมีหลายตำแหน่ง ต้องแก้ให้ครบทุกจุด) ในตัวอย่างนี้จุดแรกเลยที่เจอคือฟังก์ชั่น add() ให้ทำการสร้างโค้ดชุดใหม่เพื่อใช้แทนโค้ดชุดเดิม โดยจะส่ง options เพื่อเข้าไปสร้างคำสั่ง JOIN ไว้ด้วย $options = array( 'join' => "LEFT JOIN tb_members_prefix ON tb_members.prefix = tb_members_prefix.id" ); $option_list = $this->Resume->returnOp
สำหรับตัวอย่างนี้จะเป็นการ JOIN ตาราง 2 ตาราง 1. tb_reject_hd 2. tb_reject_desc ซึ่งจะเชื่อมกันด้วยฟิลด์ docno จะเห็นว่าเราสามารถคิวรี่เรียกข้อมูลออกมาได้ตอนที่ยังไม่ใส่ ORDER BY แต่เมื่อใส่ ORDER BY เข้าไป จะหมุนค้างจนหน้าเว็บหยุดทำงาน จากนั้นก็ลองเพิ่ม INDEX ให้กับฟิลด์ docno ในตาราง tb_reject_desc ซึ่งในตัวอย่างนี้จะสร้างตารางใหม่ขึ้นมาจากตารางเดิม เปลี่ยนชื่อเป็น tb_reject_desc_with_index และทำการเพิ่ม INDEX KEY เข้าไป เมื่อทดสอบคิวรี่แบบมี ORDER BY จะเห็นว่าสามารถแสดงผลได้ทันที จากการสังเกตตัวเลขเวลาในการประมวลผล จะเห็นได้ว่าแบบไม่ใช้ ORDER BY จะทำงานเร็วกว่า แต่ในการทำงานส่วนใหญ่ก็มักจะต้องใช้ ORDER BY อย่างหลีกเลี่ยงไม่ได้ เช่นกรณีค้นหา แบบเรียงลำดับ ตัวอย่างโค้ดคิวรี่ข้อมูลจากตารางที่ Add Index Key แล้ว <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Add Index Key</title> </head> <body> <h2>ORDER BY with INDE