1. الاستخدام الأساسي لدالة MySQL GROUP_CONCAT()
دالة GROUP_CONCAT() هي دالة تجميعية في MySQL تقوم بدمج القيم من عدةوف في سلسلة واحدة. يتيح لك ذلك الجمع بين قطع متعددة من البيانات في حقل واحد. وهي مفيدة بشكل خاص عندما تريد عرض النتائج المجمعة أو الملخصة بكفاءة.
الصيغة الأساسية
الصيغة الأساسية لـ GROUP_CONCAT() هي كما يلي:
SELECT GROUP_CONCAT(column_name) FROM table_name GROUP BY column_name;
تُستخدم هذه الدالة عادةً مع جملة GROUP BY. على سبيل المثال، الاستعلام التالي يُظهر الموظفين حسب القسم:
SELECT department, GROUP_CONCAT(employee_name) FROM employees GROUP BY department;
يعيد هذا أسماء الموظفين في كل قسم كسلسلة مفصولة بفواصل.
2. خيارات التخصيص لـ GROUP_CONCAT()
دالة GROUP_CONCAT() لا تقوم فقط بدمج القيم بل توفر أيضًا خيارات تخص متعددة. يمكنك تغيير الفاصل، إزالة القيم المكررة، أو تحديد ترتيب الفرز لحالات الاستخدام المتقدمة.
2.1 تغيير الفاصل
بشكل افتراضي، تقوم GROUP_CONCAT() بفصل القيم بفواصل. يمكنك استخدام كلمة المفتاح SEPARATOR لتحديد فاصل مختلف. على سبيل المثال، لفصل أسماء الموظفين بفاصلة منقوطة:
SELECT department, GROUP_CONCAT(employee_name SEPARATOR '; ') AS employees
FROM employees
GROUP BY department;
يعرض هذا الاستعلام أسماء الموظفين مفصولة بفواصل منقوطة.
2.2 إزالة القيم المكررة
بشكل افتراضي، تشمل GROUP_CONCAT() القيم المكررة. يمكنك القضاء على التكرارات باستخدام كلمة المفتاح DISTINCT. على سبيل المثال:
SELECT department, GROUP_CONCAT(DISTINCT employee_name) AS employees
FROM employees
GROUP BY department;
2.3 فرز النتائج
يمكنك تحديد ترتيب العناصر المدمجة باستخدام GROUP_CONCAT(). باستخدام جملة ORDER BY، يمكنك فرزها تصاعديًا أو تنازليًا. على سبيل المثال، لفرز أسماء الموظفين أبجديًا:
SELECT department, GROUP_CONCAT(employee_name ORDER BY employee_name ASC) AS employees
FROM employees
GROUP BY department;
يعيد هذا الاستعلام أسماء الموظفين مدمجة بترتيب أبجدي. استخدم DESC للترتيب التنازلي.
3. أمثلة عملية على GROUP_CONCAT()
3.1 إنشاء قائمة منتجات حسب الفئة
يمكنك استخدام GROUP_CONCAT() لسرد المنتجات حسب الفئة. على سبيل المثال، للحصول على أسماء المنتجات مرتبة أبجديًا داخل كل فئة:
SELECT category, GROUP_CONCAT(product_name ORDER BY product_name ASC) AS product_list
FROM products
GROUP BY category;
النتيجة تبدو هكذا:
category product_list
Electronics Laptop, Phone, TV
Furniture Sofa, Table

3.2 دمج أعمدة متعددة
يمكنك دمج أعمدة متعددة عن طريق الجمع بينها بفاصل مخصص داخل GROUP_CONCAT(). على سبيل المثال، لربط معرفات المنتجات وأسمائها بنقطتين:
SELECT category, GROUP_CONCAT(CONCAT(product_id, ':', product_name) ORDER BY product_name) AS product_info
FROM products
GROUP BY category;
يعيد هذا الاستعلام معرفات المنتجات وأسمائها مدمجة معًا لكل فئة.
4. القيود واعتبارات الأداء لـ GROUP_CONCAT()
بشكل افتراضي، يكون للـ GROUP_CONCAT() حد أقصى لطول الإخراج يبلغ 1024 حرفًا. بالإضافة إلى ذلك، تعتبر اعتبارات الأداء مهمة عند التعامل مع مجموعات بيانات كبيرة.
4.1 تغيير الحد الأقصى لطول السلسلة
إذا كان الحد الافتراضي غير كافٍ، يمكنك تعديل إعداد الجلسة لزيادة الحد الأقصى للطول. على سبيل المثال، لتعيينه إلى 10,000 بايت:
SET SESSION group_concat_max_len = 10000;
يسمح هذا بمعالجة مجموعات نتائج أكبر بشكل صحيح.
4.2 تحسين الأداء
عند العمل مع مجموعات بيانات كبيرة قد يتدهور أداء GROUP_CONCAT()، خاصةً عند استخدام DISTINCT أو ORDER BY. لتحسين الأداء، ضع في اعتبارك ما يلي:
- استخدام الفهارس : تطبيق الفهارس على الأعمدة المستخدمة في
GROUP BYلتحسين أداء الاستعلام. - تحديد الحد الأقصى المناسب : ضبط
group_concat_max_lenفقط حسب الحاجة لتجنب المخرجات الكبيرة غير الضرورية.
5. المقارنة مع الدوال التجميعية الأخرى
GROUP_CONCAT() يختلف عن الدوال التجميعية الأخرى مثل COUNT() أو SUM() بأنه يجمع البيانات في سلاسل نصية. أدناه مقارنة مع COUNT().
5.1 الفرق عن COUNT()
COUNT() تُرجع عدد الصفوف التيابق شرطًا ما، بينما GROUP_CONCAT() يجمع القيم في سلسلة نصية. على سبيل المثال، لحساب عدد الموظفين في كل قسم:
SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;
هذا الاستعلام يُرجع عدد الموظفين في كل قسم.
6. الخلاصة
دالة GROUP_CONCAT() هي واحدة من أكثر الدوال التجميعية مرونة في MySQL. تتيح لك دمج البيانات في سلسلة نصية واحدة مع إمكانية التخصيص والتطبيقات المتقدمة، مما يجعلها فعّالة للغاية لتصوير البيانات وإعداد التقارير. ومع ذلك، يجب الانتباه إلى قيود طول السلسلة ومشكلات الأداء، وضبط الإعدادات وفقًا لذلك. عند دمجها مع دوال تجميعية أخرى، تمكنك من تنفيذ عمليات معالجة بيانات أقوى.


