MySQL GROUP_CONCAT() ක්‍රියාකාරකම විස්තර කරයි: ව්‍යවස්ථාව, උදාහරණ, සහ කාර්ය සාධන උපදෙස්

1. MySQL GROUP_CONCAT() ක්‍රියාවලියේ මූලික භාවිතය

GROUP_CONCAT() යනු බහු පේළි වලින් අගයන් එකතු කර එකම 문자열යක් බවට පරිවර්තනය කරන MySQL එකතු කිරීමේ (aggregate) ක්‍රියාවලියකි. මෙය ඔබට බහු දත්ත කොටස් එකම ක්ෂේත්‍රයක් තුළ එකතු කිරීමට ඉඩ සලසයි. එකතු කර ඇති හෝ සාරාංශ කළ ප්‍රතිඵල කාර්යක්ෂමව පෙන්වීමට අවශ්‍ය වන විට මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

මූලික ව්‍යුහය

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() ක්‍රියාවලිය අගයන් එකතු කිරීම පමණක් නොව, විවිධ අභිරුචි විකල්පයන් ලබා දෙයි. ඔබට වෙන්කරන්නා (separator) වෙනස් කළ හැකි අතර, අනුපිළිවෙළ (duplicate) අගයන් ඉවත් කර, උසස් භාවිතය සඳහා අනුපිළිවෙළ (sort order) නියම කළ හැකිය.

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 වාක්‍යය භාවිතා කර, අගයන් ඉහළට (ascending) හෝ පහළට (descending) අනුපිළිවෙළ කළ හැකිය. පහත උදාහරණය සේවක නාමයන් අකාරානුකූලව (alphabetically) අනුපිළිවෙළ කරයි:

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() භාවිතා කර බහු තීරුවල එකතු කිරීමේදී, ඔබට අභිරුචි වෙන්කරන්නා (custom separator) සමඟ තීරුවල එකට සම්බන්ධ කළ හැකිය. පහත උදාහරණයේ, නිෂ්පාදන ID සහ නිෂ්පාදන නාමය කොලන් (:) මගින් සම්බන්ධ කර එකම 문자열යක් බවට එකතු කරයි:

SELECT category, GROUP_CONCAT(CONCAT(product_id, ':', product_name) ORDER BY product_name) AS product_info
FROM products
GROUP BY category;

මෙම විමසුම එක් එක් ප්‍රවර්ගය සඳහා නිෂ්පාදන ID සහ නිෂ්පාදන නාමය එකට සම්බන්ධ කර ප්‍රතිඵල ලබා දෙයි.

4. GROUP_CONCAT() හි සීමා සහ කාර්ය සාධන සුසංස්කරණය

GROUP_CONCAT() භාවිතා කරන විට, පෙරනිමි ප්‍රතිඵල දිග සීමාව 1024 අක්ෂර වේ. එසේම, විශාල දත්ත කට්ටලයන් සමඟ කාර්ය සාධන සලකා බැලීම වැදගත් වේ.

4.1 උපරිම 문자열 දිග වෙනස් කිරීම

පෙරනිමි උපරිම දිග ප්‍රමාණවත් නොවේ නම්, ඔබට සැසිය (session) සැකසීම වෙනස් කර ප්‍රතිඵල දිග වැඩි කළ හැකිය. පහත විමසුම සැසියේ උපරිම දිග 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() වෙනත් එකතුකාරක ක්‍රියාකාරකම් (උදාහරණként COUNT() සහ SUM()) වලින් වෙනස් වේ, මන්ද එය දත්ත එකම 문자열යක් ලෙස එකතු කරයි. මෙම කොටසේ, GROUP_CONCAT() සහ COUNT() අතර වෙනස පැහැදිලි කරමු.

5.1 COUNT() සමඟ වෙනස

COUNT() යනු නියමිත කොන්දේසියට ගැළපෙන පේළි ගණන ගණනය කිරීම සඳහා භාවිතා වන ක්‍රියාකාරකමකි. GROUP_CONCAT() 문자열 එකතු කර ප්‍රතිදානය කරන අතර, COUNT() සංඛ්‍යාත්මක අගයක් ලබා දෙයි. උදාහරණයක් ලෙස, පහත විමසුම එක් එක් දෙපාර්තමේන්තුවේ සේවක ගණන ගණනය කරයි:

SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;

මෙය ඔබට එක් එක් දෙපාර්තමේන්තුවේ කී සේවකයින් සිටිනවාදැයි ගණනය කිරීමට ඉඩ සලසයි.

6. නිගමනය

GROUP_CONCAT() MySQL හි අතිශය ලවච්චි එකතුකාරක ක්‍රියාකාරකම් අතරින් එකකි. එය දත්ත එකම 문자열යක් ලෙස එකතු කර, අභිරුචිකරණය සහ උසස් භාවිතය ඉඩ දෙන බැවින් දත්ත ගබඩා දර්ශනය සහ වාර්තා නිර්මාණය සඳහා ඉතා ප්‍රයෝජනවත් වේ. එ obstante, අක්ෂර දිග සීමා සහ කාර්ය සාධන බලපෑම් පිළිබඳ අවධානයෙන් සිටිය යුතු අතර, අවශ්‍ය විට සුදුසු සැකසුම් සකස් කළ යුතුය. එය වෙනත් එකතුකාරක ක්‍රියාකාරකම් සමඟ එකතු කිරීමෙන්, ඔබට තවත් ශක්තිමත් දත්ත සැකසීමක් ලබා ගත හැක.