[Tutorial]: MySQL – Memudahkan Melihat Data Group dengan Group Concat

msql

 

Kontributor : Yudha Tri Putra.


MySQL – Memudahkan Melihat Data Group dengan Group_Concat

Fungsi group_concat pada MySQL adalah untuk menggabungkan string dari sebuah grup data menjadi satu string atau satu row. Group_concat dapat dipakai untuk mempermudah kita dalam menampilkan  data, menjadi lebih mudah dibaca, informatif dan efisien, sehingga space yang diperlukan hanya menggunakan 1 buah row atau 1 variabel string. Misalnya, fungsi group_concat dapat digunakan dalam menampilkan nama rumah sakit dalam suatu kota, menampilkan data semua hak akses seorang user dalam satu field, menampilkan data tags pada suatu artikel dan sebagainya.
Syntax group_concat:

GROUP_CONCAT(DISTINCT expression
                                ORDER BY expression
                                SEPARATOR symbol);

Untuk mendemokan fungsi group_concat tersebut, kita buat dahulu tabelnya. Kita membutuhkan tiga tabel yaitu tabel hak_akses, tabel user dan tabel akses. Berikut query untuk membuat tiga tabel tersebut:

CREATE TABLE hak_akses(
id_aksesintnotnullauto_increment,
nama_aksesvarchar(25)notnull,
primarykey(id_akses)
);
CREATE TABLE usernya(
id_user intnotnullauto_increment,
nama_user varchar(25)notnull,
primary key(id_user)
);
CREATE TABLE aksesnya(
Idnya intnotnullauto_increment,
id_user intnotnull,
id_akses intnotnull,
primary key(idnya)
);

Lalu isikan data-data dummy atau contoh data pada tabel hak_akses, user dan aksesnya.

INSERT INTO hak_akses(nama_akses)VALUES(‘admin’);
INSERT INTO hak_akses(nama_akses)VALUES(‘moderator’);
INSERT INTO hak_akses(nama_akses)VALUES(‘author’);
INSERT INTO usernya(nama_user)VALUES(‘yudha’);
Id_user yang digunakan adalah 1, karena data di tabel nama_user hanya mempunyai satu data, sedangkan id_akses yang dipakai adalah id 1 sampai 3 atau mempunyai value admin, moderator dan author.
INSERT INTO aksesnya(id_user,id_akses)VALUES(1,1);
INSERT INTO aksesnya(id_user,id_akses)VALUES(1,2);
INSERT INTO aksesnya(id_user,id_akses)VALUES(1,3);
Misalnya kita ingin menampilkan atau ingin mengetahui user “yudha” mempunyai hak akses apa saja, maka query yang biasa dilakukan tanpa group_concat adalah fungsi join sebagai berikut:
SELECT b.nama_user,
c.nama_akses
FROM aksesnya a
Join usernya b
On b.id_user=a.id_user
Join hak_akses c
On c.id_akses=a.id_akses

Maka  hasil yang ditampilkan menjadi 3 row, lihat pada gambar berikut:image1_MySQL
Jika dilihat, value dari nama user terlihat double meskipun nama aksesnya berbeda, ini dikarenakan fungsi join yang digunakan. Berbeda jika menggunakan tambahan fungsi group_concat, kita bisa menampilkan data-data tersebut menjadi 1 row atau 1 string. Query group_concat yang digunakan sebagai berikut :

SELECT b.nama_user,
group_concat(c.nama_akses)as nama_akses
FROM aksesnya a
Join usernya b
On b.id_user=a.id_user
Join hak_akses c
On c.id_akses=a.id_akses
groupbyb.nama_user

hasil yang didapat adalah:

image2_MySQL

 
Jika ingin mengurutkan nama hak akses pada field nama_akses, maka dapat memakai tambahan order by pada group_concat, contoh:

SELECT b.nama_user,
group_concat(c.nama_aksesorderbyc.nama_aksesasc)as nama_akses
FROM aksesnya a
Join usernya b
On b.id_user=a.id_user
Join hak_akses c
On c.id_akses=a.id_akses
Groupby b.nama_user

Hasilnya terlihat nama akses yang tampil berurutan secara ascending dari a-z (berdasarkan query order by c.nama_aksesasc) sesuai nama_aksesnya yaitu admin, author, moderator.
image3_MySQL

Dan jika ingin mengganti delimiter atau pemisah default disetiap nama akses pada field nama_akses, kita dapat menggunakan query seperti berikut:

SELECT b.nama_user,
group_concat(c.nama_aksesorderbyc.nama_aksesasc
separator‘ | ‘)
as nama_akses
FROM aksesnya a
Join usernya b
On b.id_user=a.id_user
Join hak_akses c
On c.id_akses=a.id_akses
Groupby b.nama_user

image4_MySQL
Delimiter yang awalnya koma (,) sudah berubah menjadi( | ).

***

 Source:
http://www.mysqltutorial.org/mysql-group_concat/
http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html
http://lintasmediadanawa.com


Sekilas tentang penulis:
yudha700
Yudha Tri Putra, adalah Programmer di PT Lintas Media Danawa yang berkarya dalam Team Department Software Delivery