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

แสดงผลลัพธ์ MySQL เป็น Comma Separated List ด้วย CONCAT และ GROUP_CONCAT

มี 2 วิธีหลักในการแสดงผลเป็น Comma-separated List ใน MySQL

วิธีที่ 1: CONCAT() - รวมคอลัมน์ในแถวเดียว (Row-level)

CREATE TABLE CommaSeperateDemo (
    Id INT,
    FirstName VARCHAR(100),
    LastName VARCHAR(100)
);

INSERT INTO CommaSeperateDemo VALUES 
(1, 'John', 'Taylor'),
(2, 'Carol', 'Taylor'),
(3, 'Johnson', 'T.');

SELECT CONCAT(Id, ',', FirstName, ',', LastName) AS CONCATEIDFIRSTANDLASTNAME
FROM CommaSeperateDemo;

ผลลัพธ์

+---------------------------+
| CONCATEIDFIRSTANDLASTNAME |
+---------------------------+
| 1,John,Taylor             |
| 2,Carol,Taylor            |
| 3,Johnson,T.              |
+---------------------------+

วิธีที่ 2: GROUP_CONCAT() - รวมหลายแถวเป็น 1 สตริง (Aggregate)

-- รวมชื่อทั้งหมด
SELECT GROUP_CONCAT(FirstName SEPARATOR ', ') AS all_names
FROM CommaSeperateDemo;
-- ผลลัพธ์: John, Carol, Johnson

-- รวมพร้อม ID
SELECT GROUP_CONCAT(CONCAT(Id, ':', FirstName) SEPARATOR '; ') AS id_name_pairs
FROM CommaSeperateDemo;
-- ผลลัพธ์: 1:John; 2:Carol; 3:Johnson

GROUP_CONCAT Options

GROUP_CONCAT(
    [DISTINCT] expr 
    [ORDER BY {col | expr} [ASC|DESC]]
    [SEPARATOR 'str']
)

ตัวอย่างครบ

SELECT 
    GROUP_CONCAT(DISTINCT FirstName ORDER BY FirstName SEPARATOR ', ') AS unique_names,
    GROUP_CONCAT(FirstName ORDER BY Id SEPARATOR ',') AS ordered_names
FROM CommaSeperateDemo;

⚠️ ข้อจำกัด GROUP_CONCAT

  • Default Max Length: 1024 ตัวอักษร (ตัวแปร group_concat_max_len)
  • เพิ่มได้: SET SESSION group_concat_max_len = 1000000;
  • คืนค่า NULL ถ้าไม่มี Row Match
  • NULL Values จะถูกข้าม (ใช้ IFNULL(col, '') ถ้าต้องการรวม)

ใช้ร่วมกับ GROUP BY

SELECT 
    LastName,
    GROUP_CONCAT(FirstName ORDER BY FirstName SEPARATOR ', ') AS first_names
FROM CommaSeperateDemo
GROUP BY LastName;

ผลลัพธ์

+----------+---------------+
| LastName | first_names   |
+----------+---------------+
| T.       | Johnson       |
| Taylor   | Carol, John   |
+----------+---------------+

Application: Export CSV

SELECT 
    GROUP_CONCAT(
        CONCAT('"', Id, '","', FirstName, '","', LastName, '"') 
        SEPARATOR '\n'
    ) AS csv_data
FROM CommaSeperateDemo;