কম্পিউটার টিউটোরিয়াল

MySQL-এ GROUP_CONCAT + REPLACE দিয়ে খালি ফিল্ডের জন্য সেপারেটর রাখা


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 কে ইগনোর করে (ডিফল্ট) — কোনো ডাবল সেপারেটর হয় না।

  1. জাভাস্ক্রিপ্টে ফর্ম ভ্যালিডেশন: খালি ইনপুট ফিল্ড চেক করা

  2. MySQL-এ GROUP_CONCAT() বিট ফিল্ডে ব্যবহার করলে গার্বেজ ভ্যালু আসে - সমাধান

  3. MySQL-এ COALESCE() ব্যবহার করে খালি সারি/NULL-এর জন্য ডিফল্ট মান সেট করা

  4. MySQL-এ DATETIME কলামে দিন যোগ করা (DATE_ADD INTERVAL DAY)