Initekno.com – Tutorial kali ini kita akan membahas lebih dalam tentang bahasa query sql. Dimana kita akan mencari nilai rata rata, mentotalkan nilai rata-rata dari mata pelajaran tertentu, mencari total nilai dari semua nilai sesuai mata pelajaran yang siswa dapatkan, mencari nilai minimal dan maksimal.
Tetapi saya sarankan kamu paling tidak sudah pernah belajar dasar bahasa query untuk pemrosesan data seperti SELECT, INSERT, UPDATE, DELETE ,LIKE, GROUP BY, ORDER BY dan JOIN TABEL karena itu adalah dasar penting yang harus dikuasai oleh seorang analis, programmer ataupun dasabase enginer.
Ok, setelah kamu yakin bahwa kamu sudah paham dasar-dasar bahasa query, sekarang kita mulai dari sini, yaitu
Membuat tabel trx_nilaitf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
MariaDB [db_mt1webapp]> describe trx_nilaitf; +------------------+------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +------------------+------------+------+-----+-------------------+-----------------------------+ | code_devisi | varchar(4) | NO | | NULL | | | trx_id | int(11) | NO | PRI | NULL | auto_increment | | trx_id_lokasi | int(11) | NO | MUL | NULL | | | trx_id_kelas | int(11) | NO | MUL | NULL | | | trx_id_induk | int(11) | NO | MUL | NULL | | | nilaitf | int(3) | NO | | NULL | | | trx_id_pekan | int(11) | NO | MUL | NULL | | | trx_id_mapel | int(11) | NO | MUL | NULL | | | trx_id_pertemuan | int(11) | NO | MUL | NULL | | | absensi | int(1) | NO | MUL | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------------+------------+------+-----+-------------------+-----------------------------+ 11 rows in set (0.13 sec) |
Tabel ini mempunyai hubungan atau foreign key dengan tabel lokasi, tabel kelas, tabel induk, tabel pekan, tabel mapel, dan tabel absensi, semua itu saling berhubungan satu sama lain, sehingga akan tercipta siklus hubungan yang saling tertata.
Membuat tabel trx_induk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
MariaDB [db_mt1webapp]> describe trx_induk; +-----------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+-----------------------------+ | id_induk | int(11) | NO | PRI | NULL | auto_increment | | code_devisi | varchar(4) | NO | | NULL | | | code_devisi_stf | int(11) | NO | | NULL | | | trx_id_wilayah | int(11) | NO | MUL | NULL | | | trx_id_lokasi | int(11) | NO | MUL | NULL | | | nonf | varchar(12) | NO | | NULL | | | nama_induk | varchar(200) | NO | | NULL | | | trx_id_kelas | int(11) | NO | MUL | NULL | | | sekolah | varchar(100) | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-----------------+--------------+------+-----+-------------------+-----------------------------+ 10 rows in set (0.21 sec) |
Tabel ini mempunyai hubungan atau foreign key dengan tabel trx_wilayah, tabel trx_lokasi dan tabel kelas.
Membuat tabel trx_jenjang
1 2 3 4 5 6 7 8 9 |
+--------------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+-------------------+-----------------------------+ | id_jenjang | int(11) | NO | PRI | NULL | auto_increment | | nama_jenjang | varchar(20) | NO | | NULL | | | kode | varchar(1) | NO | | NULL | | | created | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +--------------+-------------+------+-----+-------------------+-----------------------------+ 4 rows in set (0.78 sec) |
Membuat tabelĀ trx_mapel
1 2 3 4 5 6 7 8 9 |
MariaDB [db_mt1webapp]> describe trx_mapel; +------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+-------------------+-----------------------------+ | id_mapel | int(11) | NO | PRI | NULL | auto_increment | | nama_mapel | varchar(100) | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------+--------------+------+-----+-------------------+-----------------------------+ 3 rows in set (0.02 sec) |
Membuat tabel trx_pertemuan
1 2 3 4 5 6 7 8 9 |
MariaDB [db_mt1webapp]> describe trx_pertemuan; +----------------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+-------------------+-----------------------------+ | id_pertemuan | int(11) | NO | PRI | NULL | auto_increment | | nama_pertemuan | varchar(50) | NO | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +----------------+-------------+------+-----+-------------------+-----------------------------+ 3 rows in set (0.12 sec) |
Sekarang silahkan tuliskan kode pada file laporan_nilai.php, dibuat menggunakan struktur html biasa tanpa plugin pdf atau phpexcel, hanya meload library exsternal yaitu paper.css
1 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.4.1/paper.css"> |
Laporan ini bersifat dinamis dan mudah untuk dikelola untuk pengembangan skala yang lebih kompleks. Silahkan tulis kode seperti dibawah ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
<h4><u>LAPORAN NILAI DAN ABSENSI SISWA</u></h4> <p><i>Assalamuāalaikum warahmatullahi wabarakatuh</i></p> <p>Segala puji bagi Allah swt. yang telah menyambungkan silaturahim antara kami dan Bapak/Ibu sekeluarga. Salam sejahtera kami sampaikan, semoga senantiasa sukses dalam menjalankan berbagai aktivitas sehari-hari.</p> <p>Berikut kami sampaikan laporan nilai bulanan, setiap kali belajar, menghasilkan nilai latihan bulanan dan berikut kami sampaikan hasilnya :</p> <!--******************************DETAIL INDUK SISWA*************************************************--> <table> <tr> <td width="80px">Nama</td> <td>:</td> <td><b><?php echo $row['nama_induk']?></b></td> </tr> <tr> <td>Nonf</td> <td>:</td> <td><?php echo $row['nonf']?></td> </tr> <tr> <td>Kelas-Nf</td> <td>:</td> <td><?php echo $row['nama_kelas']?></td> </tr> <tr> <td>Lokasi</td> <td>:</td> <td><?php echo $row['nama_lokasi']?></td> </tr> </table><br> <?php $ambil_id = $_GET['id_induk']; $sql = "SELECT trx_jenjang.nama_jenjang FROM trx_induk JOIN trx_jenjang ON trx_induk.trx_id_jenjang=trx_jenjang.id_jenjang WHERE trx_induk.id_induk='$ambil_id'"; $datainduk = $koneksi->query($sql); ?> <?php while($row= $datainduk->fetch_assoc()){ //====================================INI UNTUK LAPORAN SD============================================ if($row['nama_jenjang'] == "4SD" || $row['nama_jenjang'] == "5SD" || $row['nama_jenjang'] == "6SD"){ ?> <!--*************************************NILAI MATEMATIKA******************************************--> <?php $ambil_id = $_GET['id_induk']; $sql = "SELECT trx_nilaitf.trx_id, SUM(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS mtk, AVG(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS reratemtk FROM trx_nilaitf JOIN trx_mapel ON trx_nilaitf.trx_id_mapel=trx_mapel.id_mapel JOIN trx_induk ON trx_nilaitf.trx_id_induk=trx_induk.id_induk WHERE trx_nilaitf.trx_id_induk='$ambil_id' GROUP BY trx_nilaitf.trx_id_induk='$ambil_id' "; $data = $koneksi->query($sql); ?> <table border="1"> <thead> <tr bgcolor="#F8F8FF"> <td><b>MAPEL</b></td> <td align="center"><b>TF1</b></td> <td align="center"><b>TF2</b></td> <td align="center"><b>TF3</b></td> <td align="center"><b>TF4</b></td> <td align="center"><b>TF5</b></td> <td align="center"><b>TF6</b></td> <td align="center"><b>TF7</b></td> <td align="center"><b>TF8</b></td> <td align="center"><b>TF9</b></td> <td align="center"><b>REV1</b></td> <td align="center"><b>REV2</b></td> <td align="center"><b>REV3</b></td> <td align="center"><b>TOTAL</b></td> <td align="center"><b>RERATA</b></td> </tr> </thead> <tbody> <?php $ambil_id = $_GET['id_induk']; $sql = "SELECT trx_nilaitf.nilaitf, trx_pertemuan.nama_pertemuan FROM trx_nilaitf JOIN trx_mapel ON trx_nilaitf.trx_id_mapel=trx_mapel.id_mapel JOIN trx_pertemuan ON trx_nilaitf.trx_id_pertemuan=trx_pertemuan.id_pertemuan WHERE trx_mapel.nama_mapel LIKE 'Matematika' AND trx_nilaitf.trx_id_induk='$ambil_id'"; $datainduk = $koneksi->query($sql); ?> <tr> <td width="15%">Matematika</td> <?php while($row= $datainduk->fetch_assoc()){ if($row['nama_pertemuan'] == "TF1"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF2"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF3"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF4"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF5"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF6"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php }elseif($row['nama_pertemuan'] == "TF7"){ ?> <td align="center"><?php echo number_format($row['nilaitf']); ?></td> <?php } } ?> <?php while($row= $data->fetch_assoc()){ ?> </tr> <tr align="center" > <td colspan="13"></td> <th bgcolor="#F8F8FF"><?php echo number_format($row['mtk']); ?></th> <th bgcolor="#F8F8FF"><?php echo number_format($row['reratemtk'],1); ?></th> <?php } ?> </tr> </tbody> </table><br> <!--kalkulasi nilai di bawah ini--> <!--*******************************************************************************--> <?php } } ?> |
Perhatikan kode diatas, saya akan menampilkan nilai siswa dengan format horizontal menggunakan logika if else dengan parameter isi dari atribut yaitu nama_pertemuan.
Kemudian silahkan perhatikan query kode berikut ini :
1 2 3 4 5 6 7 8 |
$sql = "SELECT trx_nilaitf.trx_id, SUM(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS mtk, AVG(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS reratemtk FROM trx_nilaitf JOIN trx_mapel ON trx_nilaitf.trx_id_mapel=trx_mapel.id_mapel JOIN trx_induk ON trx_nilaitf.trx_id_induk=trx_induk.id_induk WHERE trx_nilaitf.trx_id_induk='$ambil_id' GROUP BY trx_nilaitf.trx_id_induk='$ambil_id' "; |
Dari query tersebut saya akan mentotalkan nilai sesuai mata pelajaran matematika menggunakan rumus sum if dan saya simpan dalam variabel AS mtk.
1 |
SUM(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS mtk, |
Sehingga ketika memanggil hasil tersebut dalam php, maka hanya perlu menuliskan kode berikut ini
1 2 |
// number_format adalah format untuk angka <?php echo number_format($row['mtk']); ?> |
Kemudian untuk mencari nilai rata-rata query yang digunakan adalah AVG, dan saya memadukan itu dengan fungsi IF, sebab saya hanya mencari nilai rata-rata tersebut berdasarkan mata pelajaran Matematika saja.
1 |
AVG(IF(trx_mapel.nama_mapel = 'Matematika', trx_nilaitf.nilaitf,null)) AS reratemtk |
Dan saya simpan dalam variabel AS reratemtk, sehingga pemanggilan dalam php seperti ini
1 2 3 |
// number_format adalah format untuk angka dengan menampilkan // baris 1 angka di belakang koma yaitu dengan kode ,1 <?php echo number_format($row['reratemtk'],1); ?> |
Jangan lupa bahwa kita menggunakan struktur join tabel di sini
1 2 |
JOIN trx_mapel ON trx_nilaitf.trx_id_mapel=trx_mapel.id_mapel JOIN trx_induk ON trx_nilaitf.trx_id_induk=trx_induk.id_induk |
Dan query tersebut saya akhiri dengan pembatasan data, artinya data ini akan tampil sesuai dengan id yang sudah kita ambil sebelumnya.
1 2 |
WHERE trx_nilaitf.trx_id_induk='$ambil_id' GROUP BY trx_nilaitf.trx_id_induk='$ambil_id' |
Sekarang kamu tuliskan lagi kode terusan pada laporan_nilai.php seperti berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<!--kalkulasi nilai--> <!--*******************************************************************************--> <?php $ambil_id = $_GET['id_induk']; $sql = "SELECT trx_nilaitf.trx_id, trx_mapel.nama_mapel, MIN(trx_nilaitf.nilaitf) AS nilaimin, MAX(trx_nilaitf.nilaitf) AS nilaimax, SUM(trx_nilaitf.nilaitf) AS totalkeseluruhan, AVG(trx_nilaitf.nilaitf) AS reratekeseluruhan FROM trx_nilaitf JOIN trx_mapel ON trx_nilaitf.trx_id_mapel=trx_mapel.id_mapel JOIN trx_induk ON trx_nilaitf.trx_id_induk=trx_induk.id_induk WHERE trx_nilaitf.trx_id_induk='$ambil_id' GROUP BY trx_nilaitf.trx_id_induk='$ambil_id' "; $data = $koneksi->query($sql); ?> <table border="1"> <?php while($row= $data->fetch_assoc()){ ?> <tr> <td width="82%" colspan="12"><b>TOTAL KESELURUHAN NILAI & TOTAL RATA-RATA SEMUA NILAI</b></td> <th width="8%" bgcolor="#F8F8FF"><?php echo number_format($row['totalkeseluruhan']); ?></th> <th bgcolor="#F8F8FF"><?php echo number_format($row['reratekeseluruhan'],2); ?></th> </tr> <tr> <td colspan="12" rowspan="2"><b>NILAI RENDAH & NILAI TINGGI</b></td> <th>MIN</th> <th>MAX</th> </tr> <tr bgcolor="#F8F8FF"> <th><?php echo number_format($row['nilaimin']); ?></th> <th><?php echo number_format($row['nilaimax']); ?></th> </tr> <?php } ?> </table><br> |
Perhatikan sepenggal baris kode query ini :
1 2 3 4 |
MIN(trx_nilaitf.nilaitf) AS nilaimin, MAX(trx_nilaitf.nilaitf) AS nilaimax, SUM(trx_nilaitf.nilaitf) AS totalkeseluruhan, AVG(trx_nilaitf.nilaitf) AS reratekeseluruhan |
Kurang lebih sama fungsinya, cuman ada penambahan MIN dan MAX. Artinya kamu akan menemukan nilai minimal dan nilaiĀ maksimal dari semua nilai siswa satuan yang kamu pilih. Dan dari fungsi SUM dan AGV akan terakumulasi total dan rata-rata keseluruhan. Untuk hasilnya kurang lebih seperti berikut ini.
Saya menambahkan beberapa mata pelajaran diantaranya yaitu, IPA, IPS, B.indonesia dan B.Inggris. Ok, sekian artikel yang singkat ini, semoga menjadikan informasi berharga buat kamu yang sedang belajar bahasa query dalam php mysql. Jangan lupa jika ada error atau masih belum faham kamu bisa tanyakan via email atau lewat kolom komentar dibawah artikel ini.
Tinggalkan Balasan