ใช้ Backtick Escape คำสงวน order ใน ORDER BY
ORDER เป็นคำสงวน (Reserved Word) ใน MySQL หากใช้เป็นชื่อคอลัมน์ ต้องครอบด้วย Backtick (`) ทุกครั้งที่อ้างอิง
ไวยากรณ์ที่ถูกต้อง
SELECT * FROM your_table_name ORDER BY `order` DESC;
ตัวอย่างสร้างตาราง (คอลัมน์ชื่อ order)
CREATE TABLE DemoTable (`order` INT); INSERT INTO DemoTable VALUES (89), (67), (90), (56);
ข้อมูลในตาราง
+-------+ | order | +-------+ | 89 | | 67 | | 90 | | 56 | +-------+
คำสั่ง ORDER BY ใช้ Backtick
SELECT * FROM DemoTable ORDER BY `order` DESC;
ผลลัพธ์ เรียงจากมากไปน้อย
+-------+ | order | +-------+ | 90 | | 89 | | 67 | | 56 | +-------+
คำอธิบาย: Backtick (`) บอก MySQL ว่า order นี้คือ Identifier (ชื่อคอลัมน์) ไม่ใช่ Keyword ORDER
แนวทางปฏิบัติที่ดี: ใช้ Backtick ครอบชื่อตารางและคอลัมน์ทุกครั้ง ในโค้ด Production เพื่อป้องกันปัญหาคำสงวนทั้งที่รู้และไม่รู้
คำสงวนอื่นๆ ที่พบบ่อยและควร Escape: SELECT, INSERT, UPDATE, DELETE, WHERE, GROUP, ORDER, BY, LIMIT, OFFSET, KEY, INDEX, PRIMARY, UNIQUE, FOREIGN, REFERENCES, CHECK, CONSTRAINT, TRIGGER, PROCEDURE, FUNCTION, VIEW, DATABASE, TABLE, COLUMN, DESC, ASC, LIKE, IN, BETWEEN, CASE, WHEN, THEN, ELSE, END, IF, NULL, TRUE, FALSE, AND, OR, NOT, IS, DISTINCT, EXISTS, ALL, ANY, SOME, LEFT, RIGHT, INNER, OUTER, JOIN, UNION, INTERVAL, TIMESTAMP, DATE, TIME, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND