sit018 Pivot Tabla Dengan PHP dan MySQL | JagaWebDev
Pivot Table Dengan PHP dan MySQL
Agus Prawoto Hadi 15-11-2016 PHP Tutorial Pada kesempatan kali ini, kita akan membahas
cara membuat pivot table dengan PHP dan
MySQL.
Tutorial ini merupakan tutorial lanjutan dari tutorial sebelumnya: Pivot Table Dengan MySQL — Panduan
Lengkap. Tutorial ini kita akan langsung menggunakan SQL yang sudah jadi, SQL ini sudah kita bahas
pada tutorial tersebut, selain itu, kita juga akan melakukan pengolahan data dengan menggunakan PHP?
Mengapa perlu bahasa pemrogrman lain? tidak cukup di SQL saja?
Ketika menampilkan data dalam bentuk pivot table, terdapat banyak sekali kemungkinan layout data
yang ingin disajikan, dengan keterbatasan SQL, hal tersebut terkadang sulit diwujudkan, sehingga kita
perlu mengolahnya lebih lanjut menggunakan bahasa pemrograman lain, dalam hal ini PHP
I. Persiapan DATA
Data yang akan kita gunakan pada tutorial ini adalah data penjualan yang tersimpan pada tabel
tabel_sales. Tabel ini memiliki lima kolom yaitu: id_trx, nama, tgl_trx, tim, dan nilai_trx .
Layout data pada tabel tersebut seperti tampak pada tabel berikut ini
idtrx nama —tgl_trx tim
1 Alfa 2016-01-10 1 250000
2 Charlie 2016-01-02 2 175000
3 Bravo 2016-01-01 1 310000
4 Bravo 2016-02-04 1 — 250000
5 Alfa 2016-01-15 1 ~~ 125000
6 Charlie 2016-01-13 2 325000
7 Bravo 2016-02-07 1 275000
8 Bravo 2016-03-06 1 — 150000
9 Alfa 2016-0205 1 215000
10 Alfa -2016-02-22 1 ~~ 360000
11 Alfa -2016-02-02 1 250000
12 Alfa 2016-03-12 1 150000 cs
Data ini sudah include pada file .zip yang dapat didownload di bagian bawah tutorial ini.
hitp:/jagowebdev.convpivot-able-dengan-php-dan-mysql! 1snvzote vot Table Dengan PHP dan MySQL | JagaWebDev
IL. Pivot Table dengan PHP dan MySQL — Menampilkan Data
Dengan PHP Dengan Total dan Subtotal Dari SQL
Pada bagian ini, kita akan membahas cara untuk menampilkan data pivot table hasil query dari MySQL
dengan PHP.
Pada bagian ini, data total dan subtotal sudah kita buat pada query SQL, sehingga kita benar-benar
hanya menampilkan datanya saja. Adapun query yang akan kita jalankan adalah:
SELECT
TFNULL( nama, "SUB TOTAL’ ) AS nama_sales,
IFNULL( tim, ‘TOTAL’ ) AS sales_tim,
SUM( IF( MONTH(tgl_trx) = 1, nilai_trx, ®) ) AS januari,
COUNT( IF( MONTH(tgl_trx) = 1, id_tex, NULL) ) AS trx_a,
SUM( IF( MONTH(tgl_trx) = 2, nlai_trx, 8) ) AS februari,
COUNT( TF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
SUM( IF( MONTH(tgl_trx) = 3, nilai_trx, @) ) AS maret,
COUNT( TF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
COUNT(id_trx) AS jm1_tex,
SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY tim, nama
WITH ROLLUP
Ketika dijalankan pada aplikasi SQL manager (HEIDI SQL) hasil yang kita peroleh adalah:
| nama_sales | sales_tim | januari | trx_1 | februari | trx_2 | maret | trx_3 | jml_trx |
| alfa ja | 375000 | 2| s1seee| 3 | 375000] 2 | 71
| Bravo ja | atee0o | 1 | s2seee | 2| #25000] 3 | |
| sus Total | 1 | saseoo | 3 | 1340002 | 5 | 1200000 | 5 | a |
| charlie | 2 | sseoea | 3 | 300000 | =a | 725000 | 2 | |
| velta 12 | @| @| 1900000 | 2 | 370000} 11] 3 |
| sus ToraL | 2 | aseeeo | 3 | 1300000 | 3 | 1095000 | 3 | |
| sus ToraL | TorAL | 1535000 | 6 | 2640000 | 8 | 2295000 | a | 2 |
Selanjutnya, mari kita tampilkan data tersebut menggunakan PHP. Adapun script yang kita gunakan
adalah:
Array
hitp:/jagowebdev.convpivot-able-dengan-php-dan-mysql! 39sit018 Pivot Tabla Dengan PHP dan MySQL | JagaWebDev
(
[nama_sales] => Alfa
[sales_tim] => 1
[bln_januari] => 375000
[trxa] => 2
[bln_februari] => 815000
[trx2] => 3
[bin_maret] => 375000
[trx_3] => 2
[jml_trx] => 7
[total_trx] => 1565000
)
[1] => Array
¢
[nama_sales]
Bravo
Hal ini kita lakukan karena kita perlu melakukan loop data hasil query tersebut dua kali, yaitu untuk
membuat header dan menampilkan isi
+ Untuk membuat header tabel, kita ambil data pertama yaitu $result[@] selanjutnya dilakukan loop untuk
mendapatkan data kolom, loop ini dilakukan karena jumlah kolom bersifat dinamis, bisa saja nanti muncul
data bulan April, dst
$header_row1 = $header_row2 = '"3
foreach ($result[@] as $key => $val)
{
if (strpos($key, ‘bln_') !== false)
{
$bln = explode('_', $key);
$header_row1 .= ‘
" . $bln[2] . ‘
';
$header_row2 .= "
Nilai
' 5
+
+
Karena header terdiri dari dua baris, baris tersebut kita simpan pada variabel masing masing $header
_rowi untuk baris pertama dan $header_row2 untuk baris kedua. Variabel ini akan kita gunakan nanti
ketika membuat tabel HTML.
+ Untuk membuat isi tabel, kita loop data yang tersimpan dalam variabel $result
. foreach ($result as $array)
t
Selanjutnya kita identifikasi baris SUB TOTAL
hitp:/jagowebdev.convpivottable-dengan-php-dan-mysal! 49sit018 Pivot Tabla Dengan PHP dan MySQL | JagaWebDev
. if ($array['nama_sales’] == "SUB TOTAL") {
$class = ' class="total"';
$print_no = *
} else {
$no#e;
Jika pada kolom nama_sales berisi “SUB TOTAL’ maka kita beri baris tersebut
atribut class="total" disamping itu, nomor urut juga tidak kita tampilkan, jika tidak (else), maka
tambahkan nilai variabel_ $no
+ Selanjutnya kita loop lagi isi dari variabel $result
: foreach ($array as $key => $val)
{
if ($key !== 'nama_sales' && $key I== ‘sales tim’)
t
$val = number_format($val, '@', ',", '
+
echo ‘
’ . $val . '
';
Selanjutnya kita tes, jika nilai tidak berasal dari kolom nana_sales dan sales_tin , maka kita buat
format rupiah pada nilai tersebut.
Demikian cara menampilkan data hasil pivot table dengan PHP.
ILI. Pivot Table dengan PHP dan MySQL — Membuat Total dan
Subtotal dengan PHP
Pada bagian sebelumnya, total dan subtotal kita buat pada query MySQL, pada kondisi tertentu, tolal dan
subtotal ini tidak bisa (rumit) jika kita buat pada SQL, melainkan harus dilakukan pengolahan lebih lanjut
menggunakan bahasa pemrograman lain.
Contoh kondisi tersebut adalah ketika kita ingin menampilkan data berdasarkan hasil penjualan diurutkan
dari total penjualan terbesar yang dikelompokkan berdasarkan nama dan tim.
Pertama, kita buat query untuk menampilkan data urut berdasarkan total penjualan (kolom total_trx ).
Adapun querynya adalah sebagai berikut:
SELECT
IFNULL( nama, ‘SUB TOTAL’ ) AS nama_sales,
IFNULL( tim, ‘TOTAL' ) AS sales_tim,
hitp:/jagowebdev.convpivottable-dengan-php-dan-mysal! 59sit018 Pivot Tabla Dengan PHP dan MySQL | JagaWebDev
SUM( TF( MONTH(tgl_trx) = 1, nilai_trx, @) ) AS bln_januari,
COUNT( TF( MONTH(tgl_trx) = 1, id trex, NULL) ) AS trx_a,
SUM( IF( MONTH(tgl_trx) = 2, nilai_trx, @) ) AS bln_februari,
COUNT( IF( MONTH(tgl_trx) = 2, nilai_trx, NULL) ) AS trx_2,
SUM( IF( MONTH(tgl_trx) = 3, ndlai_trx, @) ) AS bln_maret,
COUNT( TF( MONTH(tgl_trx) = 3, nilai_trx, NULL) ) AS trx_3,
COUNT(id_trx) AS jml_trx,
SUM( nilai_trx ) AS total_trx
FROM tabel_sales
GROUP BY tim, nama
ORDER BY SUM( nilai_trx ) DESC, tim
Query diatas sama seperti query sebelumnya, bedanya, kita hapus klausa WITH ROLLUP dan kita
tambahkan klausa ORDER BY yaitu ORDER BY SUM( nilai_trx ) DESC, tim
Hasil dari query tersebut adalah
| nama_sales | sales_tim | b1n_januari | trx_1 | bln_februari | trx_2 | bln_maret | trx3 |
| charlie | 2 | sse0e0 | 3 | e000 | a | 725e00 | 2 |
| Bravo ja | 310000 | 1 | 525000 | 2 | 825000 | 3 |
| alta ja | 375000 | 2 | siseoa | 3 | 375800 | 2 |
| belta 12 I el el 1800000 | 2| 37¢000 | a]
Selanjutnya kita buat script PHP sebagai berikut:
Hasil yang kita peroleh’
NO NAMASALES TIM
1 Charlie 2
2 deta 2
SUBTOTAL «2
3 Bravo 1
4 Alfa 1
SUBTOTAL =
TOTAL
JANUAR!
nual
850,000
o
850.000
310.000
375,000
625,000
1.535.000
FEBRUARI
nual TRK
sooo 1
roocco 2
1300003
5250002
arscoo 3
134000 5
26400006
2, milai_trx, NULL) ) AS trx_2,
3, nilai_trx, @) ) AS bln_maret,
MaRET
JMLTRX TOTALTRX
Nal TRK
725002 6 1875.00
370m 31370000
10950003 9 3245.000
3250008 6 14660.000
37sco0 2 7 1865.000
12000005 13 3225000
2295000 6 22, 64700000
Pada gambar dialas, terlihat bahwa data diurutkan berdasarkan kolom total_trx mulai dari nilai
terbesar, selain itu, data juga dikelompokkan berdasarkan sales_tim.
Penjelasan script PHP:
+ Sama seperti sebelumnya, kita simpan semua hasil query SQL kedalam sebuah variabel berbentuk array,
pada contoh kali ini kita gunakan variabel $fetch
Selanjutnya, kita perlu menata ulang data array tersebut sehingga memudahkan kita untuk
menghitung total dan subtotal
$query
$fetch
mysqli_query($conn, $sql);
mysqli_fetch_all ($query, MYSQLI_ASSOC) ;
foreach ($fetch as $key => $val)
{
$result[$val['sales_tim']][] = $val;
Hasil penataan ulang tersebut kita simpan pada variabel
sebagai berikut:
Array
(
[2] => Array
¢
hitp:/jagowebdev.convpivot-able-dengan-php-dan-mysql!
$result . Variabel $result berisi data
73sii2018 Fivot Table Dengan PHP dan MySQL | JagoWWebDev
[@] => Array
(
[nama_sales]
[sales_tim] => 2
[b1n_januari] => 850000
Charlie
[tra] => 3
[bln_februari] => 300000
[trx2] => 2
[bin_maret] => 725000
[trx_3] => 2
[jml_trx] => 6
[total_trx] => 1875000
[1] => Array
Array diatas memiliki index nomor tim dari petugas, dalam hal ini berada di kolom sales_tin (kolom
alias)
Sebagai pedoman kolom mana yang harus digunakan sebagai index, perhatikan klausa GROUP
By pada query. Pada query diatas, pada klausa Group BY kita menggunakan kolom tim dan nama,
sehingga kita periu menggunakan index kolom tim, yang pada query diatas kita ubah nama kolom
tersebut menjadi sales_tim
+ Selanjutnya kita loop variabel $result dan tambahkan baris SUB TOTAL
J SUB TOTAL
echo *
SUB TOTAL
". Stim . ‘
foreach ($subtotal as $nilai)
{
echo "
" . number_format($nilai, '@", ',', '.') . "
";
3
echo "
";
Nilai total ( $total ) dan subtotal ( subtotal ) kita akumulasi ketika membuat loop pada isi data
. $subtotal = array()5
foreach ($array as $index => $array2) // $index (mulai @, 1, dst.
{
echo ‘
". $no . '
";
foreach ($array2 as $nama_kolom => $val) // $nama_kolom (nama_sales, sales_ti
{
if ($nama_kolom != ‘nama_sales' && $nana_kolon != ‘sales_tim')
hitp:/jagowebdev.convpivot-able-dengan-php-dan-mysql! 80sit018 Pivot Tabla Dengan PHP dan MySQL | JagaWebDev
@$subtotal [$nama_kolom] += $val;
@$total[$nama_kolom] += $val;
$val = number_format($val, '@", ',',
echo "
" . $val . "
";
3
$no++5,
echo "
";
>
LS >
‘Agar tidak terakumulasi ke SUB TOTAL di bawahnya, maka setap awal loop, variabel $subtotal kita
reset: $subtotal = array()
+ Terakhir, kita buat baris total.
. U1 TOTAL
echo *
TOTAL
" 5
foreach ($total as $nilai)
{
echo ‘
’ . number_format($nilai, '@", ',', '.') . ‘
's
3
echo "
";
Selesai
Dalam praktiknya, model total dan subtotal ini akan sangat bervariasi, sehingga logika pemrogramannya
juga berbeda-beda, Contoh diatas dapat memberi gambaran bagaimana membuat total dan subtotal,
silakan dikembangkan sesuai kebutuhan
Download file yang digunakan dalam latihan ini.
Download File
Demikian pembahasan mengenai cara membuat pivot table dengan PHP dan MySQL, semoga
bermanfaat.
hitp:/jagowebdev.convpivot-able-dengan-php-dan-mysql! 99