MySQL: Pivot Table

11 December 2006 oleh paydjo

Masalah sudah terselesaikan, tetapi muncul masalah baru, apakah jika tabel pivot_category kita tambahkan data baru kita harus mengedit query ?

Jawabnya: YUP.
Cuma kita tidak harus mengedit langsung, tetapi bisa memanfaatkan Query jg ;))
Pertama kita coba buat concatenate category


 SELECT
     CONCAT('SUM(IF(C.id = ', B.id,', 1, 0)) AS ', B.nama) AS PIVOT
 FROM pivot_category B
	

hasilnya adalah:


 SUM(IF(C.id = 1, 1, 0)) AS delphi
 SUM(IF(C.id = 2, 1, 0)) AS vb
 SUM(IF(C.id = 3, 1, 0)) AS php
 SUM(IF(C.id = 4, 1, 0)) AS asp
 SUM(IF(C.id = 5, 1, 0)) AS java
	

sama kan ama query pivotnya, tinggal menyatukan aja. Menyatukannya bisa melalui bahasa pemrograman, atau kalo pake MySQL 4.1.x ke atas, bisa coba GROUP_CONCAT


 SELECT
     GROUP_CONCAT(CONCAT('SUM(IF(C.id = ', B.id,', 1, 0)) AS ', B.nama) SEPARATOR ', ') AS PIVOT
 FROM pivot_category B
	

hasilnya sangat tidak manusiawi :))


 SUM(IF(C.id = 1, 1, 0)) AS delphi, SUM(IF(C.id = 2, 1, 0)) AS vb, SUM(IF(C.id = 3, 1, 0)) AS php, SUM(IF(C.id = 4, 1, 0)) AS asp, SUM(IF(C.id = 5, 1, 0)) AS java
	

hasil salah satu query di atas dimasukkan pada query:


 SELECT
     A.nama,
     # masukkan hasil query sebelumnya disini
	
 FROM pivot_user A
     LEFT JOIN pivot_user_category C ON A.id = C.user_id
     LEFT JOIN pivot_category B ON B.id = C.cat_id
 GROUP BY A.id
	

Itu aja dulu ;))

note: istilah pivot table atau crosstab table adalah cara untuk mengubah tampilan data dari kolom menjadi baris dan sebaliknya.

Popularity: 14% [?]

Hlm: 1 2 3

Artikel terkait:

Tulisan ini belum mendapat komentar ... jadilah yang pertama.

Tinggalkan Komentar

sembadra