Beli Modem Wavecom Untuk SMS Gateway. FREE E-book Gammu + FREE Ongkos kirim !!
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Teknik Pengurutan Kembali ID Auto Increment Pada Record


May 6th, 2009 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

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['id']."'>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['id'];

// 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['id'];

   // 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.

VN:F [1.9.4_1102]
Rating: 10.0/10 (4 votes cast)
Teknik Pengurutan Kembali ID Auto Increment Pada Record, 10.0 out of 10 based on 4 ratings
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: auto increment - PHP - record - script - SQL -


Ada 17 komentar dalam artikel ini.

  1. Terima kasih banget mas…

    Artikelnya sangat berguna. Thanks a lot !!!

  2. taroyama2185 says:

    Askm,..siang pak Ros!saya yama dari semarang, oia pak q mw tanya dalam script php srng bgt di pake yg spt nie:
    .$data['id']. ->tanda titik string maksdnya ap, knp hrs spt itu?

    termksih sebelumya atas jwbanya.

  3. rosihanari says:

    to taroyama: tanda titik itu suatu operator untuk menggabungkan dua buah string.

  4. bambang says:

    ngak ngarti artikelnya ah mas

  5. bambang says:

    mas soal contoh yg atas aku coba
    kok record $data ngak muncul mas

  6. bambang says:

    oh ye..
    salah mas..
    kan $data['data'] yang aku ketik kecil semwa
    situ kan ngasihnya kapital
    dari databasenya $data['DATA']

    CREATE TABLE sample (
    id int(11) AUTO_INCREMENT,
    DATA varchar(5), <<<<< Hurup kapital
    PRIMARY KEY (id)
    );
    oks…

  7. rosihanari says:

    to bambang: o iya mas… maaf ya… tapi agak aneh. Padahal saya nulisnya pake huruf kecil lho. Tapi begitu postingan tak save menjadi huruf kapital semua. Kenapa ya? ada yang aneh nih dengan WordPress.

  8. Michael says:

    Halo…berhubung orang baru nih, mo menyampaikan saja, saya ada problem dengan mysql 5.1.36, dimana jika server di restart, auto increment yang next autoindex balik lagi ke 1, dan sepertinya ini adalah bug dari mysql 5.1.36, mungkin pak dosen ada solusi mengenai hal ini.

    PS: selama ini jika setelah restart, saya harus alter table untuk semua field yang pake auto incremet dan default di set pada NULL

  9. rosihanari says:

    to michael: wah kalo itu sudah bug nya mysql 5.1.36 ya saya sudah tidak bisa ngapa2in, krn saya bukan developer mysql nya :-) Tapi masa’ sih separah itu bugnya? anyway… tapi kita tetep bisa kok membuat incrementnya, tapi tidak di database nya melainkan digenerate oleh script. Konsepnya sama dengan artikel saya di http://blog.rosihanari.net/ide-membuat-generator-kode-unik-incremental-otomatis cuman disitu digabung dengan string lain kode incrementalnya. Sedangkan untuk kasus Anda malah jauh lebih mudah, karena hanya berupa angka saja.

  10. Michael says:

    saya juga sudah coba upgrade ke versi yang lebih baru 5.1.37, ternyata itu juga tidak memperbaiki masalah. Entah itu memang datanya yang kebanyakan atau gimana ini juga masih tahap penyelidikan. Kalau script alter nya di jalanin dari phpmyadmin lebih banyak gagal, oleh karena itu saya execute dari console

    PS : saya pake innodb untuk semua web aps saya..

  11. agus says:

    om cara pengurutan php gmna

  12. untar says:

    Pak Roihan,saya mau tanya,setiap saya mengetik pada form yang sama (inputing) contoj pada inputing login atau username atau lainnya selalu muncul kata yang sama yang akan saya ketik,contoh saya mau mengetik nama kokom,dahulu sudah ada nama kokom,lalu baru saya ketik ko sudah muncul seperti dropdown select kokom.Pertanyaan saya bagaimana cara menghilangkannya ,kalau di Foxpro seperti ini :
    thisformset.form1.text1.value = space(20)
    Terima kasih

  13. rosihanari says:

    to untar: itu karena data sebelumnya disimpan dalam cache browser. salah satu solusinya harus dibersihkan dulu cachenya. kalau di Firefox klik TOOLS > OPTION > PRIVACY, lalu pada bagian PRIVATE DATA klik CLEAR NOW.

  14. Himawan says:

    Pak saya mau nanya? klo untuk mengupdate id nya pada saat insert data, supaya id nya juga auto increment dengan id sebelumnya. Misalnya => saya punya 5 data mahasiswa dengan id => 1, 2, 3, 4, 5. Lalu saya delete data id 5 nya, setelah itu saya mau insert data mahasiswa yang baru tapi bukan jadi id ke-6 tetapi mengurutkannya lagi jadi id ke-5. Cara untuk seperti itu bagaimana yah? mohon pencerahannya. – terima kasih -

  15. rosihanari says:

    @himawan: wah kalo seperti itu mending jangan pakai autoincrement mas, karena diset seperti itu tidak bisa, CMIIW. Kalo spt itu berarti bukan auto increment lagi donk :-) Seperti itu bisa, namun Anda nanti banyak main di scriptnya. Idenya sama dengan artikel saya di http://blog.rosihanari.net/ide-membuat-generator-kode-unik-incremental-otomatis

  16. Dimas Satria Prasetia says:

    Artikel bagus…
    Saya hanya mau nambahin…
    Hati2 dalam mengubah ID…
    Biasanya ID itu berelasi denga Tabel2 yang Lain..

    Misalnya Posting Denga ID 35 sudah memiliki 5 komentar dan ID 36 Belum memiliki komentar…

    Trus anda menjalankan perintah di atas dengan alasan untuk merapihkan ID yang anda sudah Delete (misalnya ID 35) supaya berurutan lagi.

    Otomatis ID yang 36 itu berubah kan jadi 35..
    Ntar Judul Posting nya apa…Komentar nya apa..

    Jadi gak nyambung lagi..

    Kalo menurut saya, tidak terlalu penting dalam pengurutan ID. Toh pengunjung gak bakalan terlalu merhatiin tentang ID.

    Saya hanya menambahkan saja…
    Sebenarnya Hanya di Indonesia aja ID bisa berubah2 kalo di Negeri orang gk terlalu di pusingkan…hehehe

  17. rosihanari says:

    @dimas satria: yups.. betul sekali mas dimas. Sebenarnya artikel di atas adalah request dari teman saya. Saya juga gak ngerti kenapa harus utak-atik ID segala :-)



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word