Jumat, 14 Desember 2012

Query MySQL untuk Mencari Duplikasi Data (Duplicate Record)

Untuk mencari duplikasi data (duplicate record) di MySQL memang sedikit tricky, berikut ini caranya.
Beberapa hari yang lalu, saya menerima surel dari seorang mahasiswa. Saya cuplik saja bunyinya seperti ini:

Selamat Malam Pak..
Saya seorang Mahasiswa tingkat akhir yg sedang membuat sebuah website dengan bahasa pemrograman PHP.. Saya menemukan kesulitan Pak, jika tidak keberatan tolong bantu saya ya Pak.. Berikut kasusnya :
Tabel Jadwal berisi : KD_JDWL , HARI, JAM, KD_MATKUL, NID, dan KD_KELAS
Saya ingin menampilkan seluruh data diatas dengan menambahkan keterangan berupa :
Bentrok : jika Dosen A ternyata mengajar di lebih dari 1 kelas pada Hari dan Jam yg Sama..
OK : jika data’nya benar
Pertanyaan saya bagaimana coding PHP IF untuk kasus diatas pak..
Sebelumnya terima kasih banyak pak..
Nico Sahrial

Apa yang ingin dilakukan adalah mencoba mencari duplicate record atau duplikasi data dari sebuah tabel. Berikut ini jawaban dari saya.

Saya tidak akan tuliskan kode PHPnya, tapi salah satu caranya bisa dicoba seperti ini.
Kalau ingin menampilkan report total tabel dan memberikan tanda mana yang bentrok dan mana yang ok, maka perlu query yang panjang dan menghabiskan resource. Misalnya setiap Anda menampilkan sebuah record, maka Anda harus menghitung berapa jumlah record yang ada untuk NID, HARI dan JAM yang ditampilkan.
Menurut saya lebih baik Anda membuat report yang menampilkan dosen mana saja yang bentrok, misalnya dengan cara ini:

select NID, HARI, JAM count(*) cnt
from nama_tabel
group by NID, HARI, JAM
having cnt > 1
order by cnt asc;

Dari tabel ini, nanti bisa diklik lebih lanjut, untuk melihat detil jadwal yang bentrok dengan melakukan query berdasarkan
Saya belum coba query ini, silakan anda coba dan share hasilnya.
Tks.

Saya yakin masih banyak cara untuk menjawab apa yang ditanyakan tentang mencari duplikasi data dalam MySQL ini. Jadi, kalau ada yang ingin bantu dan punya solusi lain silakan tuliskan di comment saja. nanti saya tambahkan.
comments powered by Disqus