Beberapa hari lalu qu sempet bingung, bijimana Query SQL nya nampilin Data/Rows sebagai Field/Kolom. Mungkin konsepnya hampir sama dengan struktur database di Wordpress.

Case

Saya ada 2 buah tabel,

tabel 1 (user)

uidnama_lengkapusernamepassword
1Fery Wadminadmin
2Minatominatominato

tabel 2 (user_desc)

udiduidkeyvalue
11alamatPekalongan
21telp08756382927
31keterangan-
42alamatKonoha Gakure
52telp08575648274
62keterangan-

Nah, gimana caranya biar jadi kaya’ gini

uidnama_lengkapusernamepasswordalamattelpketerangan
1Fery WadminadminPekalongan08756382927-
2MinatominatominatoKonoha Gakure08575648274-

Solution

Nah dari situ qu mulai tanya di forum & alhamdulillah dapet jawaban memuaskan 😏

Salah satunya menggunakan CASE

SELECT `nama_lengkap`, `username`, `password`,
  CASE WHEN `key` = "alamat" THEN `value` END AS alamat ,
  CASE WHEN `key` = "telp" THEN `value` END AS telp,
  CASE WHEN `key` = "keterangan" THEN `value` END AS keterangan
FROM USER JOIN user_desc
ON USER.uid = user_desc.uid
GROUP BY user_desc.uid

dari query tersebut, akan dihasilkan :

uidnama_lengkapusernamepasswordalamattelpketerangan
1Fery WadminadminPekalongan08756382927NULL
2MinatominatominatoKonoha Gakure08575648274NULL

sayangnya pada field terakhir akan selalu bernilai NULL, untuk nanggulangin hal itu bisa pake cara kedua yaitu menggunakan function GROUP_CONCAT()

SELECT `nama_lengkap`, `username`, `password`,
  GROUP_CONCAT(CASE WHEN `key` = "alamat" THEN `value` END, ',') AS alamat ,
  GROUP_CONCAT(CASE WHEN `key` = "telp" THEN `value` END) AS telp,
  GROUP_CONCAT(CASE WHEN `key` = "keterangan" THEN `value` END, ',') AS keterangan
FROM USER JOIN user_desc
ON USER.uid = user_desc.uid
GROUP BY user_desc.uid

Menggunakan GROUP_CONCAT() ini lumayan, dah seperti yang diharapkan, query nya sudah gak menampakkan lagi hasil NULL value, tapi jelek nya jadi ada tanda koma sebagai pemisah, ini kita hapus aja dulu pake REPLACE, seperti ini:

SELECT `nama_lengkap`, `username`, `password`,
  REPLACE(GROUP_CONCAT(CASE WHEN `key` = "alamat" THEN `value` END, ',') , ',', '') AS alamat ,
  REPLACE(GROUP_CONCAT(CASE WHEN `key` = "telp" THEN `value` END), ',', '') AS telp,
  REPLACE(GROUP_CONCAT(CASE WHEN `key` = "keterangan" THEN `value` END, ','), ',', '') AS keterangan
FROM USER JOIN user_desc
ON USER.uid = user_desc.uid
GROUP BY user_desc.uid

Hasilnya sudah seperti yang di harapkan 😏