ฟังก์ชัน 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