Pernahkah menemui masalah terkait join table dengan table itu sendiri? Ya, ada kalanya kita memang membutuhkan query join tapi dengan tabel itu sendiri, karena untuk hal-hal tertentu kita tidak perlu memecah sebuah tabel menjadi 2 hanya untuk mempermudah query.
Sebagai contoh kita mempunyai tabel jabatan dalam perusahaan, dimana masing-masing jabatan mempunyai atasan yang record-nya ada dalam tabel itu juga.
Pertama yang harus dilakukan tentu saja membuat tabel Jabatan, dengan field dan record sebagai berikut:
Atau dengan perintah SQL sebagai berikut:
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 |
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for jabatan -- ---------------------------- DROP TABLE IF EXISTS `jabatan`; CREATE TABLE `jabatan` ( `id` int(2) NOT NULL AUTO_INCREMENT, `kode_jabatan` int(2) NULL DEFAULT NULL, `kode_atasan` int(2) NULL DEFAULT NULL, `nama_jabatan` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of jabatan -- ---------------------------- INSERT INTO `jabatan` VALUES (1, 1, 0, 'Presiden Direktur'); INSERT INTO `jabatan` VALUES (2, 2, 1, 'Direktur Utama'); INSERT INTO `jabatan` VALUES (3, 3, 2, 'Direktur'); INSERT INTO `jabatan` VALUES (4, 4, 3, 'Senior Manager'); INSERT INTO `jabatan` VALUES (5, 5, 4, 'Manager HRD'); INSERT INTO `jabatan` VALUES (6, 6, 4, 'Manager Pemasaran'); INSERT INTO `jabatan` VALUES (7, 7, 4, 'Manager Produksi'); INSERT INTO `jabatan` VALUES (8, 8, 5, 'Supervisor HRD'); INSERT INTO `jabatan` VALUES (9, 9, 6, 'Supervisor Pemasaran'); INSERT INTO `jabatan` VALUES (10, 10, 7, 'Supervisor Produksi'); INSERT INTO `jabatan` VALUES (11, 11, 7, 'Supervisor Quality Control'); INSERT INTO `jabatan` VALUES (12, 12, 5, 'Supervisor Pengembangan Karir'); INSERT INTO `jabatan` VALUES (13, 13, 6, 'Kepala Cabang'); SET FOREIGN_KEY_CHECKS = 1; |
Membuat Model
Buat model dengan nama Joinsametable _model.php, kemudian ketikkan script berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php defined('BASEPATH') or exit('No direct script access allowed'); class Joinsametable_model extends CI_Model { function __construct() { parent::__construct(); } function get_all_data() { $this->db->select('a.nama_jabatan, b.nama_jabatan as nama_atasan'); $this->db->from('jabatan a'); $this->db->join('jabatan b', 'a.kode_atasan = b.kode_jabatan', 'left'); $this->db->order_by('a.kode_atasan', 'asc'); return $this->db->get()->result(); } } |
Membuat Controller
Buat sebuah controller dengan nama Joinsametable.php, kemudian ketikkan script berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php defined('BASEPATH') or exit('No direct script access allowed'); class Joinsametable extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('Joinsametable_model', 'JoinSameTable'); } public function index() { $data = array( 'all_data' => $this->JoinSameTable->get_all_data(), ); $this->load->view('joinsametable', $data); } } |
Membuat View
Buat view dengan nama joinsametable .php, kemudian ketikkan script berikut:
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 |
<!DOCTYPE html> <html> <head> <title>Codeigniter - Join Dalam Satu Table</title> <!-- Font --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Oswald:wght@300;400;600&display=swap" rel="stylesheet"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous"> <!-- JQuery --> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script> <!-- Datatables --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css"> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script> <style> body { font-family: 'Oswald', sans-serif; font-weight: 300; } </style> </head> <body> <div class="container"> <div class="row mt-4"> <div class="col-12"> <div class="card"> <div class="card-header"> Join Dalam Satu Table </div> <div class="card-body"> <div class="responsive"> <table id="list_data" class="table display row-border table-striped compact" style="width: 100%;"> <thead> <tr> <th>No</th> <th>Nama Bagian</th> <th>Nama Atasan</th> </tr> </thead> <tbody> <?php $no = 1; foreach ($all_data as $dt) { ?> <tr> <td><?php echo $no; ?></td> <td><?php echo $dt->nama_jabatan; ?></td> <td><?php echo $dt->nama_atasan; ?></td> </tr> <?php $no++; } ?> </tbody> </table> </div> </div> </div> </div> </div> <script type="text/javascript"> var dataTable_; $(document).ready(function() { dataTable_ = $('#list_data').DataTable({}); }) </script> </body> </html> |
Hasil tampilan yang akan didapatkan adalah sebagai berikut:
Demikian bahasan kita kali ini tentang join dalam satu tabel, semoga bermanfaat.