Sedang mencari referensi untuk membuat laporan penjualan dari database MySQL? Laporan penjualan sangat penting untuk memantau kinerja bisnis anda, mulai dari jumlah transaksi hingga produk yang paling laris. Dengan memiliki contoh laporan database penjualan yang tepat, Anda bisa menyusun sistem pelaporan yang rapi, otomatis, dan mudah dianalisis.
Dalam artikel ini, kami akan membahas secara lengkap tentang contoh laporan database penjuala, mulai dari pengertian, query database, dan script PHP yang bisa Anda gunakan. Simak informasi berikut ini.
Mengenal MySQL
MySQL adalah salah satu bahasa yang sering digunakan untuk membangun dan mengembangkan aplikasi yang membutuhkan database. Bahasa SQL banyak digunakan karena mudah dipelajari.
Selanjutnya kami akan membahas cara membuat database, tabel, dan mengolah database untuk mendapatkan laporan sesuai kebutuhan. Semakin tidak sabar kan dengan pembahasannya, mari lanjut simak pembahasannya.
Tujuan laporan penjualan
Berikut adalah beberapa tujuan dibuatkannya laporan penjualan pada proses bisnis:
- Menganalisa penjualan produk atau jasa yang Anda miliki.
- Melihat trend penjualan, sehingga bisa dimaksimalkan sesuai kebutuhan pasar.
- Digunakan untuk manajemen stok serta mempersiapkan strategi pemasaran.
Struktur Tabel Database Penjualan
Saat ini, kita sudah masuk ke pembahasan utama yang ditunggu-tunggu yaitu membuat database penjualan. Sebagai contoh, kita akan membuat laporan database penjualan dengan hasil seperti berikut.

Untuk membuat laporan tersebut, secara sederhana diperlukan sedikitnya 6 tabel data didalam database. Berikut ini contoh struktur tabel penjualan yang wajib ada dalam membuat database penjualan.
- Tabel barang
CREATE TABLE `barang` (
`id` int(11) NOT NULL,
`kode_barang` varchar(10) DEFAULT NULL,
`nama_barang` varchar(100) DEFAULT NULL,
`harga` int(11) DEFAULT NULL,
`stok` int(11) DEFAULT NULL,
`supplier_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Tabel pelanggan
CREATE TABLE `pelanggan` (
`id` int(11) NOT NULL,
`nama` varchar(100) DEFAULT NULL,
`jenis_kelamin` enum('L','P') DEFAULT NULL,
`telp` varchar(12) DEFAULT NULL,
`alamat` tinytext
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Tabel pembayaran
CREATE TABLE `pembayaran` (
`id` int(11) NOT NULL,
`waktu_bayar` datetime DEFAULT NULL,
`total` int(11) DEFAULT NULL,
`metode` enum('TUNAI','TRANSFER','EDC') DEFAULT NULL,
`transaksi_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Tabel supplier
CREATE TABLE `supplier` (
`id` int(11) NOT NULL,
`nama` varchar(100) DEFAULT NULL,
`telp` varchar(12) DEFAULT NULL,
`alamat` tinytext
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Tabel transaksi
CREATE TABLE `transaksi` (
`id` int(11) NOT NULL,
`waktu_transaksi` datetime DEFAULT NULL,
`keterangan` tinytext,
`total` int(11) DEFAULT NULL,
`pelanggan_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Tabel transaksi_detail
CREATE TABLE `transaksi_detail` (
`transaksi_id` int(11) NOT NULL,
`barang_id` int(11) NOT NULL,
`harga` int(11) DEFAULT NULL,
`qty` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Review Database Penjualan
Selanjutnya, mari kita review database penjualan dari tabel yang telah dibuat. Contoh laporan database penjualan ini masih memungkinkan untuk dikembangkan lagi. agar Anda mendapat hasil laporan tentang;
- Laporan total penjualan per hari
- Laporan penjualan setiap produk
- Laporan penjualan setiap pelanggan
- Laporan penjualan setiap bulan, dll.
Laporan penjualan tersebut bisa dibuat dalam bentuk html, grafik, Excel ataupun cetak PDF. Ternyata, bisa seseru itu ya dari database sederhana tersebut?
Membuat Laporan Database Penjualan Menggunakan PHP dan MySQL
Untuk lebih mudah dalam mendemokan laporan penjualan, kami memilih menggunakan bahasa pemrograman PHP Native. Anda dapat mengikuti langkah yang kami tulis ini, dan nantinya bisa Anda kembangkan lebih mendalam.
/laporanPenjualan/
├── db.php
├── index.php
├── barang.php
├── db.php
├── pelanggan.php
├── supplier.php
├── transaksi.php
├── search_barang.php
├── search_pelanggan.php
├── search_supplier.php
├── search_transaksi.php
├── db.php
└── (partials)
└── table-style.php
Sebelumnya kita telah membuat tabel database penjualan. Langkah berikutnya adalah mengisi data form. Pada contoh laporan database berikut, kami mengisinya dengan data dummy.
INSERT INTO `barang` (`id`, `kode_barang`, `nama_barang`, `harga`, `stok`, `supplier_id`) VALUES
(1, 'BRG001', 'Pulpen Pilot', 3500, 100, 1),
(2, 'BRG002', 'Buku Tulis Sidu', 7000, 150, 1),
(3, 'BRG003', 'Penggaris 30cm', 4500, 80, 2),
(4, 'BRG004', 'Spidol Snowman', 10000, 60, 2),
(5, 'BRG005', 'Penghapus Joyko', 2000, 200, 3),
(6, 'BRG006', 'Pensil 2B', 2500, 300, 3);
INSERT INTO `pelanggan` (`id`, `nama`, `jenis_kelamin`, `telp`, `alamat`) VALUES
(1, 'Andi Saputra', 'L', '0811111111', 'Jl. Cendana No. 10'),
(2, 'Budi Hartono', 'L', '0822222222', 'Jl. Merpati No. 15'),
(3, 'Citra Dewi', 'P', '0833333333', 'Jl. Rajawali No. 20'),
(4, 'Dina Ayu', 'P', '0844444444', 'Jl. Kutilang No. 25');
INSERT INTO `pembayaran` (`id`, `waktu_bayar`, `total`, `metode`, `transaksi_id`) VALUES
(1, '2025-06-01 10:05:00', 15000, 'TUNAI', 1),
(2, '2025-06-02 12:35:00', 29000, 'TRANSFER', 2),
(3, '2025-06-03 15:50:00', 12000, 'EDC', 3),
(4, '2025-06-04 09:20:00', 32000, 'TUNAI', 4);
INSERT INTO `supplier` (`id`, `nama`, `telp`, `alamat`) VALUES
(1, 'PT Sumber Makmur', '081234567890', 'Jl. Anggrek No. 1'),
(2, 'CV Berkat Abadi', '082345678901', 'Jl. Melati No. 2'),
(3, 'UD Jaya Sentosa', '083456789012', 'Jl. Kenanga No. 3');
INSERT INTO `transaksi` (`id`, `waktu_transaksi`, `keterangan`, `total`, `pelanggan_id`) VALUES
(1, '2025-06-01 10:00:00', 'Pembelian alat tulis', 15000, 1),
(2, '2025-06-02 12:30:00', 'Belanja perlengkapan kantor', 29000, 2),
(3, '2025-06-03 15:45:00', 'Beli spidol dan penghapus', 12000, 3),
(4, '2025-06-04 09:15:00', 'Pembelian kebutuhan sekolah', 32000, 4);
INSERT INTO `transaksi_detail` (`transaksi_id`, `barang_id`, `harga`, `qty`) VALUES
(1, 1, 3500, 2),
(1, 5, 2000, 2),
(2, 2, 7000, 2),
(2, 3, 4500, 1),
(2, 4, 10000, 1),
(3, 4, 10000, 1),
(3, 5, 2000, 1),
(4, 2, 7000, 2),
(4, 6, 2500, 4);
1. Koneksi Database
Berikut ini contoh koneksi database MySQL. Menggunakan script php. Simpan kode script tersebut ke dalam file db.php
<?php
$host = 'localhost';
$user = 'root';
$pass = 'root';
$db = 'db_penjualanrw';
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
2. Membuat tampilan Utama
Buat file index.php kemudian isi dengan kode script berikut.
<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>Dashboard Transaksi</title>
<?php include 'partials/table-style.php'; ?>
</head>
<body>
<h2>Dashboard Transaksi</h2>
<nav>
<a href="barang.php">Data Barang</a>
<a href="pelanggan.php">Data Pelanggan</a>
<a href="supplier.php">Data Supplier</a>
<a href="transaksi.php">Data Transaksi</a>
</nav>
<table>
<tr>
<th>ID</th>
<th>Waktu</th>
<th>Keterangan</th>
<th>Total</th>
<th>Pelanggan</th>
</tr>
<?php
$query = "SELECT t.*, p.nama AS pelanggan FROM transaksi t
LEFT JOIN pelanggan p ON t.pelanggan_id = p.id ORDER BY t.waktu_transaksi ASC";
$result = $conn->query($query);
while ($row = $result->fetch_assoc()):
?>
<tr>
<td><?= $row['id'] ?></td>
<td><?= $row['waktu_transaksi'] ?></td>
<td><?= $row['keterangan'] ?></td>
<td><?= number_format($row['total']) ?></td>
<td><?= $row['pelanggan'] ?></td>
</tr>
<?php endwhile; ?>
</table>
</body>
</html>
3. Membuat Tampilan Data barang
Buat file barang.php kemudian isi dengan kode script berikut.
<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>Data Barang</title>
<?php include 'partials/table-style.php'; ?>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h2>Data Barang</h2>
<a href="index.php">← Kembali ke Dashboard</a>
<input type="text" id="search" placeholder="Cari barang...">
<div id="result"></div>
<script>
$(document).ready(function() {
function loadData(q = '') {
$.post('search_barang.php', {
query: q
}, function(data) {
$('#result').html(data);
});
}
loadData();
$('#search').keyup(function() {
loadData($(this).val());
});
});
</script>
</body>
</html>
4. Membuat Tampilan Data pelanggan
Buat file pelanggan.php kemudian isi dengan kode script berikut.
<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>Data Pelanggan</title>
<?php include 'partials/table-style.php'; ?>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h2>Data Pelanggan</h2>
<a href="index.php">← Kembali ke Dashboard</a>
<input type="text" id="search" placeholder="Cari Pelanggan...">
<div id="result"></div>
<script>
$(document).ready(function() {
function loadData(q = '') {
$.post('search_pelanggan.php', {
query: q
}, function(data) {
$('#result').html(data);
});
}
loadData();
$('#search').keyup(function() {
loadData($(this).val());
});
});
</script>
</body>
</html>
5. Membuat Tampilan Data supplier
Buat file supplier.php kemudian isi dengan script berikut.
<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>Data Supplier</title>
<?php include 'partials/table-style.php'; ?>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h2>Data Supplier</h2>
<a href="index.php">← Kembali ke Dashboard</a>
<input type="text" id="search" placeholder="Cari Supplier...">
<div id="result"></div>
<script>
$(document).ready(function() {
function loadData(q = '') {
$.post('search_supplier.php', {
query: q
}, function(data) {
$('#result').html(data);
});
}
loadData();
$('#search').keyup(function() {
loadData($(this).val());
});
});
</script>
</body>
</html>
6. Membuat Tampilan Data transaksi
Buat file transaksi.php kemudian isi dengan script berikut.
<?php include 'db.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>Data Transaksi</title>
<?php include 'partials/table-style.php'; ?>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h2>Data Transaksi</h2>
<a href="index.php">← Kembali ke Dashboard</a>
<form method="GET" action="export_transaksi_pdf.php" target="_blank" style="float:right;">
<input type="hidden" name="q" id="searchHidden">
<button type="submit">🖨️ Cetak PDF</button>
</form>
<input type="text" id="search" placeholder="Cari barang...">
<div id="result"></div>
<script>
$(document).ready(function() {
function loadData(q = '') {
$.post('search_transaksi.php', {
query: q
}, function(data) {
$('#result').html(data);
});
}
loadData();
$('#search').on('keyup', function() {
let q = $(this).val();
loadData(q);
$('#searchHidden').val(q); // kirim ke PDF saat dicetak
});
});
</script>
</body>
</html>
Berikut ini tampilan menu utamanya.

7. Membuat Cetak PDF
Untuk fitur cetak PDF, kita akan menggunakan library Dompdf yang merupakan library populer untuk melakukan generated PDF yang berasal dari HTML. Jalankan baris perintah berikut melalui terminal di directory projek Anda.
composer require dompdf/dompdf
8. Membuat fitur pencarian transaksi
Buat file search_transaksi.php kemudian isi dengan script berikut.
<?php
include 'db.php';
$search = isset($_POST['query']) ? $conn->real_escape_string($_POST['query']) : '';
$query = "SELECT t.*, p.nama AS pelanggan FROM transaksi t
LEFT JOIN pelanggan p ON t.pelanggan_id = p.id
WHERE t.keterangan LIKE '%$search%'
OR p.nama LIKE '%$search%'
OR t.id LIKE '%$search%'";
$result = $conn->query($query);
echo "<table>
<tr><th>ID</th><th>Waktu</th><th>Keterangan</th><th>Total</th><th>Pelanggan</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr>
<td>{$row['id']}</td>
<td>{$row['waktu_transaksi']}</td>
<td>{$row['keterangan']}</td>
<td>" . number_format($row['total']) . "</td>
<td>{$row['pelanggan']}</td>
</tr>";
}
echo "</table>";
?>
Untuk search pada bagian search_barang.php, search_pelanggan.php, search_supplier.php caranya hampir mirip.
9. Membuat cetak PDF data transaksi
Buat file export_transaksi_pdf.php kemudian isi dengan code script berikut.
<?php
require 'db.php';
require_once 'vendor/autoload.php'; // atau dompdf/autoload.inc.php
use Dompdf\Dompdf;
// Ambil keyword dari URL
$keyword = isset($_GET['q']) ? $conn->real_escape_string($_GET['q']) : '';
$html = '<h3>Hasil Cetak Transaksi</h3>';
$html .= '<table border="1" cellpadding="5" cellspacing="0" width="100%">';
$html .= '<tr><th>ID</th><th>Waktu</th><th>Keterangan</th><th>Total</th><th>Pelanggan</th></tr>';
$query = "SELECT t.*, p.nama AS pelanggan FROM transaksi t
LEFT JOIN pelanggan p ON t.pelanggan_id = p.id
WHERE t.keterangan LIKE '%$keyword%'
OR p.nama LIKE '%$keyword%'
OR t.id LIKE '%$keyword%'
ORDER BY t.waktu_transaksi DESC";
$result = $conn->query($query);
while ($row = $result->fetch_assoc()) {
$html .= '<tr>';
$html .= "<td>{$row['id']}</td>";
$html .= "<td>{$row['waktu_transaksi']}</td>";
$html .= "<td>{$row['keterangan']}</td>";
$html .= "<td>" . number_format($row['total']) . "</td>";
$html .= "<td>{$row['pelanggan']}</td>";
$html .= '</tr>';
}
$html .= '</table>';
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream("transaksi_filtered.pdf", array("Attachment" => false));
exit;
Tampilan saat cetak transaksi sebagai berikut.

Saat di klik maka tampil contoh laporan database penjualan seperti berikut:

Anda dapat bereksplorasi dengan mengembangkan scriptnya sesuai dengan kebutuhan. Detail kodenya dapat Anda lihat disini.
Penutup
Laporan penjualan diperlukan untuk perkembangan suatu bisnis. Dengan laporan yang akurat memudahkan Anda dalam membuat perencanaan strategi dan pengambilan keputusan.
Dengan bahasa MySQL dan contoh laporan database diatas, memungkinkan Anda untuk membuat laporan penjualan harian, penjualan setiap produk, laporan setiap bulan secara akurat dan terstruktur.
Demikian artikel kami tentang contoh laporan database penjualan dengan MySQL, semoga bermanfaat.