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

ใช้ GROUP_CONCAT กับ REPLACE จัดการช่องว่างว่างใน MySQL

ฟังก์ชัน GROUP_CONCAT() รวมค่าจากหลายแถวเป็นสตริงเดียวคั่นด้วยคอมม่า แต่ถ้ามีค่าว่าง (Empty string) จะได้คอมม่าคู่ (,,) สามารถใช้ REPLACE() แทนที่คอมม่าคู่เป็นคอมม่าเดี่ยวได้

ตัวอย่างการสร้างตาราง

mysql> create table DemoTable ( 
    Id int, 
    Number varchar(100) ); 
Query OK, 0 rows affected (2.03 sec)

เพิ่มข้อมูล (มีค่าว่าง)

mysql> insert into DemoTable values(10,'456'); 
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(11,'345'); 
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values(10,''); 
Query OK, 1 row affected (0.63 sec)
mysql> insert into DemoTable values(10,'278'); 
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable values(10,''); 
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable values(10,'789'); 
Query OK, 1 row affected (0.47 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;
+------+--------+
| Id   | Number |
+------+--------+
| 10   | 456    |
| 11   | 345    |
| 10   |        |
| 10   | 278    |
| 10   |        |
| 10   | 789    |
+------+--------+
6 rows in set (0.00 sec)

คำสั่ง GROUP_CONCAT แล้ว REPLACE คอมม่าคู่

mysql> select Id, replace(group_concat(Number), ',,', ',') 
from DemoTable group by Id;

ผลลัพธ์

+------+----------------------------------------+
| Id   | replace(group_concat(Number), ',,', ',') |
+------+----------------------------------------+
| 10   | 456,278,789                            |
| 11   | 345                                    |
+------+----------------------------------------+
2 rows in set (0.00 sec)

คำอธิบาย: GROUP_CONCAT จะข้ามค่า NULL แต่ ไม่ข้าม Empty String ('') จึงได้คอมม่าคู่ REPLACE(',,', ',') แทนที่คอมม่าคู่เป็นคอมม่าเดี่ยว

วิธีที่ดีกว่า: ใช้ GROUP_CONCAT(DISTINCT NULLIF(Number, '')) จะแปลง Empty String เป็น NULL ก่อน แล้ว GROUP_CONCAT จะข้าม NULL อัตโนมัติ ไม่ต้อง REPLACE