Teknik Pengurutan Kembali ID Auto Increment Pada Record

Sharing is caring!

Ada seorang member saya yang berasal dari Aceh bernama Mas Baiquni menanyakan:

“Pak.. misalkan saya punya 10 record atau data yang memiliki ID katakanlah 1, 2, 3, …, 10. Kemudian saya ingin apabila saya menghapus salah satu data menggunakan script tertentu, misalkan data dengan ID 3 yang dihapus, maka secara otomatis ID nomor 4 menjadi ID nomor 3, ID nomor 5 menjadi 4, dst.. sehingga urutan keseluruhan ID datanya menjadi 1, 2, 3, 4, …, 9. Bagaimana cara untuk mewujudkan hal tsb? Dengan catatan field ID menggunakan AUTO INCREMENT”.

Nah… mungkin ada diantara pengunjung dari blog ini yang menjumpai masalah serupa dengan mas Baiquni di atas, berikut ini artikel pembahasannya.

Untuk memudahkan pemahaman, kita misalkan memiliki tabel sederhana seperti di bawah ini:

CREATE TABLE sample (
  id int(11) auto_increment,
  data varchar(5),
  PRIMARY KEY  (id)
);

dimana terdapat field ‘ID’ yang menggunakan AUTO INCREMENT. Selanjutnya andaikan kita juga memiliki 5 buah record sebagai berikut:

INSERT INTO sample VALUES (1, 'A');
INSERT INTO sample VALUES (2, 'B');
INSERT INTO sample VALUES (3, 'C');
INSERT INTO sample VALUES (4, 'D');
INSERT INTO sample VALUES (5, 'E'); 

Apabila kita perhatikan sampel record pada tabel di atas, ID nya masih terurut dengan baik 1 s/d 5.

Untuk skenario prosesnya, andaikan kita buat dahulu sebuah script untuk menampilkan semua data, sekaligus di dalamnya terdapat link untuk menghapus data yang diinginkan.

show.php

<?php

// koneksi ke mysql
mysql_connect('dbhost', 'dbuser', 'dbpass');
mysql_select_db('dbname');

// membuat daftar (list)
echo "<ul>";

// query untuk menampilkan semua data dalam tabel
$query = "SELECT * FROM sample";
$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil))
{
   // disertakan pula link untuk menghapus data berdasarkan ID nya
   echo "<li>".$data['id']." ".$data['data']." ( <a href='delete.php?id=".$data&#91;'id'&#93;."'>Hapus</a> ) </li>";
}

echo "</ul>";

?>

Sebelum kita mulai membuat script untuk proses penghapusan yang didalamnya terdapat mekanisme pengaturan kembali urutan IDnya, kita terlebih dahulu cari ide penyelesaiannya.

OK… idenya adalah sebagai berikut:

Andaikan dari 5 data yang tersedia dalam tabel, kita telah hapus data dengan ID 3. Dengan demikian dalam tabel sekarang terdapat 4 buah data dengan urutan IDnya 1, 2, 4, 5.

OK… trus bagaimana dengan pengurutan kembali IDnya menjadi 1, 2, 3, 4? Ya.. idenya adalah kita buat sebuah variabel katakanlah $no. Nilai awal variabel ini adalah 1. Kemudian lakukan update ID pada record dengan ID = 1

UPDATE sample SET id = $no WHERE id = 1;

Selanjutnya kita lakukan increment $no menjadi 2, dan kembali lakukan update pada record dengan ID = 2

UPDATE sample SET id = $no WHERE id = 2;

Kita naikkan lagi nilai $no menjadi 3, dan update record dengan ID = 4

UPDATE sample SET id = $no WHERE id = 4;

Nilai $no bertambah satu lagi menjadi 4 dan lakukan update record dengan ID = 5

UPDATE sample SET id = $no WHERE id = 5;

Setelah proses updating ID semua record selesai, yang menjadi pertanyaan adalah bagaimana kita buat mekanisme supaya bila sebuah record baru dimasukkan ke dalam tabel, nilai ID nya menjadi 5 (melanjutkan ID yang terakhir setelah updating)? Secara default, bila sebuah data baru dimasukkan ke dalam tabel, maka ID nya akan berisi 6 (melanjutkan ID dari urutan awal sebelum proses updating).

Nah… untuk mewujudkan hal tersebut, kita perlu ubah value AUTO INCREMENT nya menjadi 5 (yaitu nilai $no terakhir ditambah 1), dengan maksud supaya bila data baru dimasukkan ke dalam tabel, nilai ID nya akan dimulai dari 5.

OK… ide dah dapat, selanjutnya kita bisa buat script untuk hapus sekaligus pengurutan kembali ID nya.

delete.php

<?php

// koneksi ke mysql
mysql_connect('dbhost', 'dbuser', 'dbpass');
mysql_select_db('dbname');

// membaca ID dari data yang akan dihapus
$id = $_GET&#91;'id'&#93;;

// query hapus data berdasarkan ID
$query = "DELETE FROM sample WHERE id = $id";
$hasil = mysql_query($query);

// konfirmasi penghapusan
if ($hasil) echo "Data sudah terhapus";

// query untuk membaca semua data dengan sorting berdasarkan ID secara descending
// sorting descending ini untuk mengantisipasi record yang urutan ID nya tidak urut dalam setiap barisnya
// misal 1, 4, 2, 5, 3 
$query = "SELECT * FROM sample ORDER BY id";
$hasil = mysql_query($query);

// nilai awal increment
$no = 1;

while ($data  = mysql_fetch_array($hasil))
{
   // membaca id dari record yang tersisa dalam tabel
   $id = $data&#91;'id'&#93;;
  
   // proses updating id dengan nilai $no
   $query2 = "UPDATE sample SET id = $no WHERE id = $id";
   mysql_query($query2);

   // increment $no
   $no++;   
}

// mengubah nilai auto increment menjadi $no terakhir ditambah 1
$query = "ALTER TABLE sample  AUTO_INCREMENT = $no";
mysql_query($query); 

?>

Nah.. mudah bukan membuatnya. So easy.. so simple… 🙂 Mudah-mudahan artikel ini berguna bagi Anda terutama mas Baiquni.

Tinggalkan Komentar