Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียงชุดตัวเลขคั่นคอมม่าใน MySQL ตามตัวเลขตัวแรกด้วย SUBSTRING_INDEX

เมื่อคอลัมน์เก็บชุดตัวเลขคั่นด้วยคอมม่า (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)

คำอธิบาย:

  1. SUBSTRING_INDEX(SetOfNumbers, ',', 1) - ดึงส่วนก่อนคอมม่าตัวแรก (ตัวเลขตัวแรก)
  2. CAST(... AS UNSIGNED) - แปลงเป็นตัวเลข เพื่อเรียง 245 < 1001 < 2000 (ถ้าเป็นสตริงจะเรียง 1001 < 2000 < 245)

ข้อควรระวัง: การเก็บหลายค่าในคอลัมน์เดียว (CSV) ขัดกับ Normalization แนะนำให้แยกตารางความสัมพันธ์ (One-to-Many) เพื่อ Query และ Index ได้มีประสิทธิภาพ