Tuesday, November 18, 2014

Membuat Auto Delete Record Yang Sama Dengan PHP


Auto Delete record kita butuhkan saat akan menghapus record yang sama pada tabel MySQL yang jumlahnya ratusan, ribuan bahkan lebih banyak lagi. Record ini dihapus karena kita akan menentukan suatu field menjadi PRIMARY KEY. Jika ternyata masih ada data yang sama maka proses ALTER PRIMARY KEY akan gagal.

Seperti yang saya tulis pada artikel sebelumnya tentang mencari record yang sama pada tabel MySQL, beberapa saat yang lalu saya mengalami kasus error saat import data aktiva kedalam database. Proses error tersebut terjadi karena field nomor_aktiva saya set PRIMARY KEY. Untuk mengatasi hal itu terpaksa sementara field nomor_aktiva dihilangkan PRIMARY KEY nya agar data dari file CSV bsa masuk kedalam database.

Selanjutnya saya cari data-data yang sama pada field nomor_aktiva menggunakan perintah SELECT dan HAVING, yang memiliki COUNT lebih dari satu untuk kemudian dihapus. Tetapi masalah kemudian muncul ketika perintah SQL ini menghasilkan record yang banyak sekali mencapai tiga ratusan lebih. Tentu jika harus menghapus secara manual akan memerlukan waktu yang lama.

Untuk mengatasi hal itu saya buat script PHP untuk menghapus record yang sama secara otomatis dan hanya menyisakan satu record saja dengan ketentuan sebagai berikut :
  1. Backup dulu tabel yang akan dieksekusi.
  2. Pada contoh berikut menggunakan nama database office dan tabel aktiva.
  3. Membuat query untuk mengambil data yang memiliki record lebih dari satu berikut ini:
    SELECT nomor_aktiva, COUNT( * ) AS jumlah
    FROM  `aktiva` 
    GROUP BY nomor_aktiva
    HAVING COUNT(  `nomor_aktiva` ) >1 LIMIT 0,50;
    
  4. Untuk nilai LIMIT pada query diatas bisa disesuaikan dengan keinginan, semakin banyak semakin lama eksekusinya. Untuk mencoba script silahkan angka 50 diganti dulu dengan 1 agar jika ada kesalahan tidak terlalu fatal.
  5. Menentukan limit jumlah record yang akan dihapus dengan rumus LIMIT=jumlah -1
  6. Membuat query delete berikut ini saat proses perulangan mysql_fetch_array
    DELETE FROM aktiva WHERE nomor_aktiva='".$d['nomor_aktiva']."' LIMIT ".$limit;
    
  7. Silahkan klik reload sampai tidak ada lagi tampilan record yang dihapus pada layar.
Dan berikut ini script PHP lengkap auto delete record yang sama pada tabel MySQL:
 <?php    
 $dbHost = "localhost";    
 $dbUser = "root";    
 $dbPass = "123";    
 $dbName = 'office';    

 // membuat koneksi mysql    
 $conn = mysql_connect($dbHost, $dbUser, $dbPass, $dbName);    

 // Mengecek koneksi mysql    
 if (!$conn) die("Koneksi Gagal: " . mysql_error());    
 else echo "Koneksi MySQL Berhasil ...<br/>";     

 //membuat koneksi database     
 $dbSelected = mysql_select_db($dbName, $conn);     

 // Mengecek koneksi database    
 if (!$dbSelected) die ('Koneksi Gatabase Gagal: ' . mysql_error());    
 else echo "Koneksi Database ".$dbName." Berhasil ...<br/>";   

 //membuat query untuk mencari record yang sama lebih dari satu 
 $q="SELECT nomor_aktiva, COUNT( * ) AS jumlah  
 FROM `aktiva`   
 GROUP BY nomor_aktiva  
 HAVING COUNT( `nomor_aktiva` ) >1 LIMIT 0,50";  
 
 $r=mysql_query($q);  
 
 while($d = mysql_fetch_array($r))  
 {  
      echo $d['nomor_aktiva']." , ".$d['jumlah'];  
      $limit=$d['jumlah']-1;  
      $q="DELETE FROM aktiva WHERE nomor_aktiva='".$d['nomor_aktiva']."' LIMIT ".$limit;  
      if(mysql_query($q)) echo ", dihapus <br/>";  
      else echo ", gagal";  
 }  
 ?>  
Referensi :

0 komentar

Post a Comment