18 Mart 2012 Pazar

mysql table id leri siralamak ve yeniden dizmek. (reorder primary_key)

tablo1 tablosu; id ve label adlı 2 sütundan oluşuyor ve id primary key auto increment mevcut.
  insert into tablo1 values(11,'ahmet'),(3,'mahmut'),(4,'muharrem'),(5,'sedat'),(1,'emre');  
Şeklinde bir komut ile satırlarınızı olutşturduysanız,
SELECT * FROM tablo1;
komutu çalıştırdığınızda order by komutu kullanmazsanız, sonuçlar aşağıdaki gibi ekleme sıranıza göre gelecektir.
  id      label  11	ahmet  3	mahmut  4	muharrem  5	sedat  1	emre  
Bu tabloda
ALTER TABLE tablo1 ORDER BY id ASC;
komutunu çalıştırırsanız, yeni
Select * from tablo1;
komutunuzun sonucu şöyle olur:
  id	label  1	emre  3	mahmut  4	muharrem  5	sedat  11	ahmet  
--------------------------------- İnsanlar yukarıda yazdığımla şu yazdığımı birbirine karıştırıyor. Şimdi ayrı bir konu olduğunu belirterek; bu satırların id lerini de tekrar sıraya dizmek istiyorsak şöyle yapabiliriz.
  SET @count = 0;  UPDATE `tablo1` SET `id` = @count:= @count + 1;
Sonuçlar:
  Select * from tablo1;  
Sonuçlar :
  id      label  1	emre  2	mahmut  3	muharrem  4	sedat  5	ahmet  
şeklinde görüldüğü gibi tablo id'lere göre sıraya dizilmiş bir şekilde olacaktır. Bu konuyla ilgili araştırıyorsanız (neden araştırdığınızı siz biliyorsunuz zaten, benim bunu uygulama derdim; düzenli olması ve en önemlisi bu veritabanını kullanan herkes için bir standart oturtmak istememdi), en mantıklısı ilk yaptığımdan sonra 2. yaptığımı uygulamaktır. Böylece hem satırlar default eklenme sırasına göre değil de , ilgili id'ye göre sıralanmış olacaktır. Daha sonra da , bu idleri de 1 den başlayacak şekilde tekraradan dizmiş olacağız. Yani bahsetmiş olduğum 2 olayı komutu birlikte kullanınca, artık idleri 1 den ardışık bir şekilde devam eden bir tablonuz olmuş oalcaktır. Özellikle ayar tablolarınızın arada sırada primary_key alanında böyle bir güzelleştirme yaparsınız diye düşündük.. :) Devamı için : mysql table id leri siralamak ve yeniden dizmek. (reorder primary_key)

Hiç yorum yok:

Yorum Gönder

Yorumunuzu esirgemeyiniz..