จากบทความ Retrieving the last record in each group จะเป็นการ JOIN แบบเลือกรายการล่าสุด เช่นกรณีที่ข้อมูลในตารางหลัก มีการเปลี่ยนแปลงรุ่น เปลี่ยนเวอร์ชั่น แต่ยังคงใช้รหัสเดิม และต้องการแค่ข้อมูลเวอร์ชั่นล่าสุดเรคอร์ดเดียวเท่านั้น นอกจากนี้ยังมีอีกกรณี นั่นก็คือ เมื่อเราย้อนกลับไปดูข้อมูลที่เคยบันทึกเอาไว้ โดยอ้างอิงรหัสเดียวกัน ที่ปัจจุบันได้เปลี่ยนเวอร์ชั่นไปแล้ว ข้อมูลที่ JOIN มาจะแสดงอย่างไร??? จะรู้ได้อย่างไรว่า ณ วันที่นั้นๆ ใช้ข้อมูลเรคอร์ดไหน??? ( ถ้าเราเก็บไอดี PK ไปเลยจะไม่เจอปัญหานี้ แต่เนื่องจากฟิลด์ Code ดันเป็น Unique ID ซึ่งยึดเป็น PK ไปในตัวก็เลยคิดว่าไม่จำเป็นต้องสร้าง ID ขึ้นมาอีก ) ตัวอย่างข้อมูลที่เคยบันทึกไว้ด้วยชื่อหมวดหมู่ก่อนการเปลี่ยนแปลง กรรไกรสองรายการ ที่ใช้หมวดหมู่เดียวกัน แต่คนละปี กรรไกรตัดกิ่ง ณ วันที่ 2017-06-01 ได้ทำรายการด้วยชื่อ " วัสดุทำสวน " กรรไกรเล็ก ณ วันที่ 2018-01-31 ได้ทำรายการด้วยชื่อ " วัสดุอุปกรณ์ทำสวน " SELECT * FROM product WHERE name LIKE '%กรรไกร%' เรามาดูข้อมูลเมื่อ JO
สำหรับตัวอย่างนี้จะเป็นการ 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