{ Jangan Malas Membaca Ya }
pernah bingung, bagaimana Query SQL nya cara menampilkan Data/Baris sebagai Field/Kolom. Mungkin teman-teman juga pengen tau juga bagaimana caranya. Langsung aja yah…Cekidot!...
Disini memakai 2 tabel adalah tbl_user dan tbl_user_desc
tabel 1 (tbl_user)
id_user | nama_lengkap | username | password
--------------------------------------------
1 | admin | admin | admin
2 | | co-paz | copaz11
tabel 2 (tbl_user_desc)
id_user_desc | id_user | key | value
------------------------------------------
1 | 1 | alamat | Jambi
2 | 1 | no_hp | 081213141516
3 | 1 | keterangan | -
4 | 2 | alamat | Batam
5 | 2 | no_hp | 081277855601
6 | 2 | keterangan | https://co-paz.blogspot.com
Nah ayo…, bagaimana caranya agar jadi seperti ini?
id_user | nama_lengkap | username | password | alamat | no_hp | keterangan
--------------------------------------------------------------------------------------
1 | admin | admin | admin | Jambi | 081213141516 | -
2 | | co-paz | copaz11 | Batam | 081277855601 | https://co-paz.blogspot.com
SOLUSI:
Setelah mencari dan mulai tanya di lembaga & alhamdulillah dapat juga tanggapan yang sangat memuaskan ;)
Salah satunya menggunakan CASE
SELECT tbl_user.id_user, `nama_lengkap`, `username`, `password`, CASE WHEN `key` = "alamat" THEN `value` END AS alamat, CASE WHEN `key` = "no_hp" THEN `value` END AS no_hp, CASE WHEN `key` = "keterangan" THEN `value` END AS keterangan FROM tbl_user JOIN tbl_user_desc ON tbl_user.id_user = tbl_user_desc.id_user GROUP BY tbl_user_desc.id_user
dari query tersebut, akan dihasilkan :
id_user | nama_lengkap | username | password | alamat | no_hp | keterangan
--------------------------------------------------------------------------------------
1 | admin | admin | admin | Jambi | 081213141516 | [NULL]
2 | | co-paz | copaz11 | Batam | 081277855601 | [NULL]
Sayangnya pada field terakhir akan selalu bernilai NULL, untuk nanggulangin hal itu dapat menggunakan cara kedua adalah menggunakan function GROUP_CONCAT()
SELECT tbl_user.id_user, `nama_lengkap`, `username`, `password`, GROUP_CONCAT(CASE WHEN `key` = "alamat" THEN `value` END, ',') AS alamat , GROUP_CONCAT(CASE WHEN `key` = "no_hp" THEN `value` END) AS no_hp, GROUP_CONCAT(CASE WHEN `key` = "keterangan" THEN `value` END, ',') AS keterangan FROM tbl_user JOIN tbl_user_desc ON tbl_user.id_user = tbl_user_desc.id_user GROUP BY tbl_user_desc.id_user
Menggunakan GROUP_CONCAT() ini lumayan, sudah ibarat yang diharapkan, query nya sudah gak menampakkan lagi hasil NULL value, tapi buruk nya jadi ada tanda koma sebagai pemisah, ini kita hapus aja dulu pake REPLACE, ibarat ini:
SELECT tbl_user.id_user, `nama_lengkap`, `username`, `password`, REPLACE(GROUP_CONCAT(CASE WHEN `key` = "alamat" THEN `value` END, ',') , ',', '') AS alamat , REPLACE(GROUP_CONCAT(CASE WHEN `key` = "no_hp" THEN `value` END) , ',', '') AS no_hp, REPLACE(GROUP_CONCAT(CASE WHEN `key` = "keterangan" THEN `value` END, ',') , ',', '') AS keterangan FROM tbl_user JOIN tbl_user_desc ON tbl_user.id_user = tbl_user_desc.id_user GROUP BY tbl_user_desc.id_user
Hasilnya sudah ibarat yang di harapkan ;)
Bagaimana berdasarkan teman-teman tentang Cara Menampilkan data/baris sebagai field/kolom di SQL Query? Cukup mudahkan? Sekian dan terimakasih :D.