Mendapatkan total dan total sebelumnya
Sebagai penyedia Jasa Web Design Surabaya, kami terkadang menemukan permintaan customer untuk menampilkan total penjualan hari ini dan tanggal sebelumnya untuk menghitung prosentase kenaikan atau penurunannya.
Nah umumnya kita mencari cara mudah yaitu melakukan dua kali query di database MySQL untuk mendapatkan data yang diminta. Memang tidak ada masalah, tetapi kurang efektif.
Secara umum, kita akan menggunakan query seperti di bawah ini:
Baca Juga: Ketahui Kelebihan Pemrograman MySQL dan Kekurangannya
<?php
$result=doQuery("select t1.total,t1.tanggal from total_realisasi t1
where LEFT(t1.tanggal,7)=? order by t1.tanggal DESC", Array('2019-07'));
foreach(doArray($result) as $row)
{
$result2=doQuery("SELECT t2.total FROM total_realisasi t2 WHERE t2.tanggal < ? order by t2.tanggal DESC limit 1", Array($row['tanggal']));
}
?>
doQuery dan doArray adalah sql query sesuai dengan class mysql yang kita gunakan.
Sebenarnya, hasil yang sama bisa dilakukan cukup dengan satu kali query, dan tentunya akan lebih efektif.
Caranya adalah sebagai berikut:
<?php
$result=doQuery("select
t1.total,t1.tanggal,
IFNULL((SELECT t2.total FROM total_realisasi t2 WHERE t2.tanggal < t1.tanggal order by t2.tanggal DESC limit 1), 0) as prevjml
from total_realisasi t1
where LEFT(t1.tanggal,7)=? order by t1.tanggal DESC", Array('2019-07'));
?>
IFNULL((SELECT t2.total FROM total_realisasi t2 WHERE t2.tanggal < t1.tanggal order by t2.tanggal DESC limit 1), 0) as prevjml artinya jika tanggal sebelumnya tidak ditemukan, makan nilai yang akan di return adalah 0.
LEFT(t1.tanggal,7) adalah function dari MySQL untuk mengambil tujuh karakter dari kiri.
Dari mysql query di atas kita akan mendapatkan hasil
total | tanggal | prevjml
6000000 | 2019-07-30 | 84000000
84000000 | 2019-07-29 | 39000000
39000000 | 2019-07-27 | 50000000
50000000 | 2019-07-26 | 5000000
5000000 | 2019-07-18 | 6000000
6000000 | 2019-07-16 | 10000000
Baca Juga: Ketahui Kelebihan Pemrograman MySQL dan Kekurangannya
Dari sini bisa kita lihat nilai pada kolom prevjml sama dengan nilai pada kolom total di tanggal sebelumnya.
Sebagai contoh: nilai prevjml pada tanggal 2019-07-30 merupakan nilai total pada tanggal 2019-07-29. Dan dengan data di atas, kita sudah bisa menampilkan juga prosentase kenaikan atau penurunan penjuala dengan script PHP biasa.
Dengan demikian kita tidak perlu lagi melakukan dua kali query untuk mendapatkan nilai total sebelumnya.
Selamat mencoba.