เมื่อคอลัมน์เก็บชุดตัวเลขคั่นด้วยคอมม่า (CSV) เช่น '245,654,76,89,98' และต้องการจัดเรียงตามตัวเลขตัวแรก ใช้ SUBSTRING_INDEX() ดึงตัวแรก แล้ว CAST AS UNSIGNED แปลงเป็นตัวเลข
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
SetOfNumbers text );
Query OK, 0 rows affected (0.53 sec)
เพิ่มข้อมูลชุดตัวเลข
mysql> insert into DemoTable values('245,654,76,89,98');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2000,567,9090,6789');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('1001,90595,657,99');
Query OK, 1 row affected (0.20 sec)
แสดงข้อมูลก่อนจัดเรียง
mysql> select * from DemoTable;
+--------------------+ | SetOfNumbers | +--------------------+ | 245,654,76,89,98 | | 2000,567,9090,6789 | | 1001,90595,657,99 | +--------------------+ 3 rows in set (0.00 sec)
คำสั่ง ORDER BY ตัวเลขตัวแรก
mysql> select * from DemoTable order by cast(substring_index(SetOfNumbers, ',', 1) as unsigned);
ผลลัพธ์ (เรียง 245, 1001, 2000)
+--------------------+ | SetOfNumbers | +--------------------+ | 245,654,76,89,98 | | 1001,90595,657,99 | | 2000,567,9090,6789 | +--------------------+ 3 rows in set (0.00 sec)
คำอธิบาย:
SUBSTRING_INDEX(SetOfNumbers, ',', 1)- ดึงส่วนก่อนคอมม่าตัวแรก (ตัวเลขตัวแรก)CAST(... AS UNSIGNED)- แปลงเป็นตัวเลข เพื่อเรียง 245 < 1001 < 2000 (ถ้าเป็นสตริงจะเรียง 1001 < 2000 < 245)
ข้อควรระวัง: การเก็บหลายค่าในคอลัมน์เดียว (CSV) ขัดกับ Normalization แนะนำให้แยกตารางความสัมพันธ์ (One-to-Many) เพื่อ Query และ Index ได้มีประสิทธิภาพ