當需要將多筆記錄的某個欄位值合併為一條字串(如標籤聚合、URL 串聯)時,MySQL 內建的 GROUP_CONCAT 函數是最高效的解決方案。本文透過實際範例示範基本用法、自訂分隔符與分組應用。
CREATE TABLE IF NOT EXISTS `tet` (
`id` INT(11) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`url` VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tet` (`id`, `name`, `url`) VALUES
(1, '百度', 'https://www.baidu.com'),
(0, 'google', 'https://www.google.com.hk'),
(3, '400電話', 'https://www.jb51.net');
SELECT GROUP_CONCAT(name) AS name
FROM tet
WHERE 1 = 1
LIMIT 0, 30;
結果: 百度,google,400電話
SELECT GROUP_CONCAT(url SEPARATOR ' @ ') AS url
FROM tet
WHERE 1 = 1
LIMIT 0, 30;
結果: https://www.baidu.com @ https://www.google.com.hk @ https://www.jb51.net
SELECT GROUP_CONCAT(name) AS name
FROM tet
WHERE 1 = 1
GROUP BY id
LIMIT 0, 30;
結果: 每組一行(此處 id 唯一,故各自一行)
google
百度
400電話
GROUP_CONCAT(name ORDER BY name DESC)GROUP_CONCAT(DISTINCT name)SET SESSION group_concat_max_len = 1000000; 調大。GROUP_CONCAT 讓原本需在應用層迴圈處理的字串聚合下推至資料庫層,大幅簡化程式碼並提升效能。