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

การรวมข้อมูลจากหลายแถวด้วย GROUP_CONCAT() ใน MySQL

ภาพรวม

ฟังก์ชัน GROUP_CONCAT() ใช้รวมค่าจากหลายแถว (Rows) ให้กลายเป็นสตริงเดียว คั่นด้วยเครื่องหมายจุลภาค (หรือตัวคั่นที่กำหนด) มักใช้ร่วมกับ GROUP BY

ไวยากรณ์พื้นฐาน

GROUP_CONCAT([DISTINCT] expr [ORDER BY expr] [SEPARATOR str])

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (CountryName VARCHAR(100));

INSERT INTO DemoTable VALUES ('US');
INSERT INTO DemoTable VALUES ('AUS');
INSERT INTO DemoTable VALUES ('UK');

2. ใช้ GROUP_CONCAT แบบง่าย

SELECT GROUP_CONCAT(CountryName) FROM DemoTable;
-- ผลลัพธ์: US,AUS,UK

3. ใช้กับ ORDER BY และ SEPARATOR

SELECT GROUP_CONCAT(CountryName ORDER BY CountryName SEPARATOR ' | ') 
FROM DemoTable;
-- ผลลัพธ์: AUS | UK | US

4. ใช้ร่วมกับ GROUP BY (จัดกลุ่ม)

-- สมมติมีคอลัมน์ Region
SELECT Region, GROUP_CONCAT(CountryName ORDER BY CountryName) 
FROM DemoTable 
GROUP BY Region;

ตัวอย่างขั้นสูง: ใช้ใน Stored Procedure

DELIMITER //
CREATE PROCEDURE searchDemo(
    IN stringValue VARCHAR(255),
    OUT output TEXT
)
BEGIN
    SELECT GROUP_CONCAT(DISTINCT CountryName ORDER BY CountryName)
    INTO output
    FROM DemoTable
    WHERE CountryName LIKE stringValue;
END //
DELIMITER ;

-- เรียกใช้
CALL searchDemo('U%', @output);
SELECT @output;
-- ผลลัพธ์: UK,US

ตัวเลือกสำคัญ

ตัวเลือกคำอธิบาย
DISTINCTกำจัดค่าซ้ำ
ORDER BYเรียงลำดับก่อนรวม
SEPARATORกำหนดตัวคั่น (Default = ',')

ข้อจำกัดและการตั้งค่า

  • ความยาวสูงสุดควบคุมโดย group_concat_max_len (Default = 1024 bytes)
  • เพิ่มค่าได้ด้วย: SET SESSION group_concat_max_len = 1000000;
  • คืนค่า NULL หากไม่มีแถวที่ตรงเงื่อนไข

กรณีใช้งานจริง

  • สร้างรายการ Tag, Category แบบคั่นด้วยจุลภาค
  • รวม Email/Phone ของลูกค้าในกลุ่มเดียวกัน
  • สร้าง CSV string จากผล Query
  • แสดงรายการสินค้าใน Order เดียว