Data Engineering

เคล็ดลับการเรียงลำดับข้อมูลใน MySQL

บางครั้งการเรียงลำดับจาก MySQL ก็ไม่ได้ดั่งใจเราสักเท่าไหร่ บทความนี้ถูกรวบรวมมาจากปัญหาที่ผมได้พบเจอจากการทำงาน

บางครั้งการเรียงลำดับจาก MySQL ก็ไม่ได้ดั่งใจเราสักเท่าไหร่ บทความนี้ถูกรวบรวมมาจากปัญหาที่ผมได้พบเจอจากการทำงานเกี่ยวกับการเรียงลำดับ เชิญรับชมกันเลยครับ

เรียงลำดับตัวเลขให้ถูกต้อง

ถ้าท่านมีข้อมูลตัวเลขที่ต้องการเรียงลำดับ เช่น 1, 2, 3, …., 9, 10, 11 แต่ผลลัพธ์การเรียงข้อมูลใน MySQL กลับเรียงเป็น 1, 10, 11, 2, 3, 4… สาเหตุเป็นเพราะ field นั้นถูกกำหนดในโครงสร้างตารางให้ field นั้นเป็นชนิดตัวอักษร เช่น varchar แต่ถ้าเป็นชนิดตัวเลข เช่น int ปัญหานี้จะไม่เกิดขึ้น

ตาราง question_choice

หลักการแก้ไขปัญหา คือ

  1. เพิ่มเลข 0 เข้าไปที่ตัวเลขหลักเดียว เช่น 1 จะกลายเป็น 01
  2. ตั้งชื่อให้ เช่น new_order
  3. เรียงลำดับจาก new_order
SELECT *, IF(LENGTH(q_order) = 1, CONCAT('0', q_order), q_order) as new_order
FROM question_choice ORDER BY new_order

เรียงลำดับตามตัวอักษร (ภาษาไทย)

ในกรณีที่ข้อมูลมีสระนำหน้าและโครงสร้างตารางถูกกำหนดให้เป็น utf8 จะเกิดปัญาหา คือ เมื่อมีการเรียงข้อมูล แถวที่มีสระนำหน้าจะถูกเอาไว้ตำแหน่งหลัง

ตาราง employee

หลักการแก้ไขปัญหา คือ แปลง field ที่ต้องการเรียงข้อมูล (ในที่นี้คือ first_name) ให้เป็น tis-620

SELECT * FROM employee ORDER BY CONVERT(first_name USING tis620) ASC
Tags