GROUP_CONCAT-এ খালি মান হলে ডাবল সেপারেটর সমস্যা সমাধান
MySQL-এ GROUP_CONCAT() খালি স্ট্রিং ('') কে সেপারেটর হিসেবে গণনা করে, ফলে ডাবল কমা (,,) দেখায়। REPLACE() দিয়ে ডাবল কমাকে সিঙ্গল কমায় রূপান্তর করা যায়।
টেবিল ও ডেটা (খালি মানসহ)
mysql> CREATE TABLE DemoTable (Id INT, Number VARCHAR(100)); mysql> INSERT INTO DemoTable VALUES(10,'456'), (11,'345'), (10,''), (10,'278'), (10,''), (10,'789');
সব রেকর্ড
+------+--------+ | Id | Number | +------+--------+ | 10 | 456 | | 11 | 345 | | 10 | | | 10 | 278 | | 10 | | | 10 | 789 | +------+--------+
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 | +------+----------------------------------------+
ব্যাখ্যা
GROUP_CONCAT(Number)— Id=10-এর জন্য '456,,278,,789' তৈরি করে (খালি মানগুলো কমা বানায়)।REPLACE(..., ',,', ',')— ডাবল কমাকে সিঙ্গল কমায় বদলে দেয়।- একাধিক খালি মান থাকলে একাধিকবার
REPLACEবা রিকারসিভ CTE লাগতে পারে।
ভালো পদ্ধতি: NULL ব্যবহার করা
SELECT Id, GROUP_CONCAT(NULLIF(Number, '')) FROM DemoTable GROUP BY Id;
NULLIF(Number, '') খালি স্ট্রিংকে NULL বানায়, GROUP_CONCAT NULL কে ইগনোর করে (ডিফল্ট) — কোনো ডাবল সেপারেটর হয় না।