Memperoleh Data Terbaru dari Join Dua Tabel di MySQL
Dimisalkan, suatu instansi memberikan status kepada karyawannya menjadi tiga tingkat. Yaitu kontrak, tidak tetap dan tetap.
Setiap status, memiliki kode nomor karyawan sendiri, yang akan berganti jika sang Karyawan telah layak naik pangkat, sesuai dengan loyalitas dan prestasinya.
Di mana ketika karyawan berganti status, nomor lama ke yang baru, nomor yang lama akan tetap tersimpan di database (tanpa dihapus), kemudian nomor yang baru akan otomatis menjadi nomor acuan karyawan yang bersangkutan.
Lalu bagaimanakah desain databasenya?
Kesalahan yang potensial dihadapi sebagai programmer, untuk kasus di atas adalah menganggap nomor karyawan sebagai acuan di database.
Penulis yakin, dengan melihat NIK (Nomor Induk Karyawan), pasti kebanyakan programmer database, akan menjadikan NIK sebagai ID acuan utama karyawan.
Hal ini karena NIK dianggap tidak akan berubah sampai karyawan itu pensiun.
Sebab, biasanya, jika ID acuan diganti, maka data-data sebelumnya yang mengacu pada ID lama, bisa-bisa tidak terdeteksi (bug) jika si Programmer tidak menyiapkan jurus cadangan.
Sehingga, seringkali programmer akan pusing 7 keliling, jika diperlukan maintenance penggantian NIK di suatu hari, bahkan ketika si Programmer itu telah tidak dipekerjakan oleh pihak penyewa jasa.
Oleh karena itu, dengan melihat kasus di atas yang ternyata diperlukan acuan lain sebagai ID utama, maka menurut penulis, mudahnya adalah menggunakan nomor urut karyawan itu sendiri, ketika diregistrasikan pertama kali di database.
Untuk itu, dalam posting ini, penulis menawarkan desain dua tabel database MySQL, dengan kode seperti di bawah ini:
CREATE TABLE biodata ( id INT NOT NULL AUTO_INCREMENT, nama VARCHAR(255) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE nokaryawan ( iduser INT NOT NULL, nomor VARCHAR(255) NOT NULL UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
Tabel pertama bernama biodata, yang berisi kolom ID user dan nama, sedangkan tabel kedua bernama nokaryawan, yang berisi kolom nomor dan iduser.
Kolom iduser terkoneksi dengan ID user di tabel biodata.
Dengan cara seperti ini, maka karyawan dapat berganti-ganti nomor NIK lebih dari satu kali.
Sedangkan pengambilan nilai nomor, sebenarnya bisa saja dengan dua tahap, yaitu mengambil nilai ID dulu di tabel biodata, lalu baru mengambil nilai nomor yang terbaru dari iduser yang sesuai di tabel nokaryawan.
Namun, dua langkah ini dapat dilakukan dengan satu langkah, yaitu dengan menggunakan klausa JOIN antara tabel biodata dan nokaryawan, dengan perintah kurang lebih seperti di bawah ini:
SELECT biodata.id,biodata.nama,h.nomor FROM biodata JOIN (SELECT * FROM nokaryawan WHERE nokaryawan.created_at IN (SELECT MAX(nokaryawan.created_at) FROM nokaryawan GROUP BY nokaryawan.iduser)) AS h ON biodata.id=h.iduser
Dengan perintah ini, programmer akan dapat membuat daftar karyawan, dengan nomor terbaru, meskipun dengan tabel nomor terpisah.
Komentar
Posting Komentar