• 07-06-2015, 07:14:41
    #1
    Merhaba Arkadaşlar,

    Ne zamandır kafama takılan bir soru var. Alternatif yollarını biliyorum fakat doğru olanı öğrenmek istiyorum.

    Aşağıdaki tabloda id sutünu var mesela şimdi burada yeni veri geldiğinde 1,2,3,4 diye devam edicek. Peki bunu şu şekilde yapmak mümkün mü
    "AB1234BC3211", "AB1235BC3212", "AB1235BC3213" veya türevleri şeklinde.
    create table tablo_adi (
    id integer(11) not null auto_increment,
    primary key(id)
    );
    Not : Integer'ın sadece sayısal değerler içerdiğini biliyorum öğrenmek istediğim integer dışında yukarıdaki gibi yapılabilir mi?
  • 08-06-2015, 10:57:50
    #2
    Selamlar create,

    Yapmak istedigin hic tavsiye degildir.
    Ama cozumlerden birisi:

    Tabloyu normal kurmak, ve sonra bir SELECT-de CONCAT yapmak ve id-leri istedigin formatda gosterebilirsin. Yani:

    create table tablo_adi (
     id int(3) unsigned zerofill not null auto_increment primary key,
     name varchar(30) not null
    );
    
    insert into tablo_adi set name = 'Ali';
    insert into tablo_adi set name = 'Ayse';
    
    select concat('KOD', id) as id, name from tablo_adi;
    Sonuc:
  • 08-06-2015, 12:08:11
    #3
    dbd adlı üyeden alıntı: mesajı görüntüle
    Selamlar create,

    Yapmak istedigin hic tavsiye degildir.
    Ama cozumlerden birisi:

    Tabloyu normal kurmak, ve sonra bir SELECT-de CONCAT yapmak ve id-leri istedigin formatda gosterebilirsin. Yani:

    create table tablo_adi (
     id int(3) unsigned zerofill not null auto_increment primary key,
     name varchar(30) not null
    );
    
    insert into tablo_adi set name = 'Ali';
    insert into tablo_adi set name = 'Ayse';
    
    select concat('KOD', id) as id, name from tablo_adi;
    Sonuc:
    Hocam cevabiniz için teşekkür ederim neden onermiyorsunuz acaba onu da öğrenebilir miyim

    SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
  • 08-06-2015, 12:27:36
    #4
    Eger bir yolu bulursan, tavsiye olmaz demek istedim.
    Cunku normalde, bildigin gibi, auto incredemnt ve primary key INT formatinda olur.

    Ama gonderdigim cevap ise yararmali...problemini cozebilir bence.
  • 08-06-2015, 13:16:55
    #5
    create adlı üyeden alıntı: mesajı görüntüle
    Merhaba Arkadaşlar,

    Ne zamandır kafama takılan bir soru var. Alternatif yollarını biliyorum fakat doğru olanı öğrenmek istiyorum.

    Aşağıdaki tabloda id sutünu var mesela şimdi burada yeni veri geldiğinde 1,2,3,4 diye devam edicek. Peki bunu şu şekilde yapmak mümkün mü
    "AB1234BC3211", "AB1235BC3212", "AB1235BC3213" veya türevleri şeklinde.
    create table tablo_adi (
    id integer(11) not null auto_increment,
    primary key(id)
    );
    Not : Integer'ın sadece sayısal değerler içerdiğini biliyorum öğrenmek istediğim integer dışında yukarıdaki gibi yapılabilir mi?
    Merhaba,

    Öncelikle böyle fantastik bir düşünce ve soruyu türettiğiniz için teşekkür ederim, üzerinde uğraşmak eğlenceli oldu diyebilirim.

    Kullanmış olduğunuz alternatif yolları belirtmemişsiniz, yine de ben kendi yaptığım şekilde bir paylaşımda bulunacağım.

    Bilindiği gibi auto_increment ifadesi sayısal değerler dışında kullanılamaz, yalnız, alfanümerik bir veri tipinin karakterleri modifiye edilerek sayısal değerlerde artış sağlanıp, alfanümerik olan veri tipi artan sayı ile güncellenebilir.

    Bu durumda bize yardımcı olacak olan MySQL elementleri; trigger, concat ve substring'dir.

    Örnek olarak;

    Tablo Yaratımı:

    15'er karakter uzunluğunda 2 adet varchar türünde veri değişkeni ile idtest tablosu yaratılır.

    create table idtest(
    `id` varchar(15),
    `name` varchar(15) not null,
    primary key(id)
    );
    idtest tablosu içerisine bir defaya mahsus "AB1235BC3213" alfanümerik id değerini alacak bir veri giriş sorgusu gerçekleştirilir.

    insert into idtest(id,name)values('AB1235BC3213','test');
    idtest tablosu içerisine girilecek olan her yeni kayıt için "idtrig" isimli bir tetikleyici yaratılır. Bu tetikleyici, son girilen id'yi artış sağlanması istenen 9. karakterinden itibaren bölümledikten sonra, 9. karakterden itibaren kalan ve maksimum 5 karakter olabilecek olan sayı üzerine 1 ekleyerek elde edilen sayı karakterini tekrar alfanümerik kısma ekleyerek yeni bir değer oluşturur.

    create trigger idtrig before insert on `idtest`
    for each row
    set new.id=(select concat('AB1235BC',(select substring((select id from idtest order by id desc limit 1),9,5))+1));
    Veri Girişi:

    idtest tablosuna "test" isimli yeni bir veri girişi yapılır, oluşturulacak olan yeni verinin alfanümerik id'sinin arttırılmak istenen nümerik kısmı güncellenecektir.

    insert into idtest(name)values('test');
    Teşekkürler.
    İyi çalışmalar.
  • 08-06-2015, 14:44:02
    #6
    Hocam kullanicak olduğum yöntemin

    $sql=mysql_query ("show table Status Like tabloadi");
    $cikti=mysql_fetch_assoc ($sql)
    Echo $cikti [auto increment];

    İle auto increment e gelecek olan değeri görmem gerekiyor. Çünkü bağlantı olarak 5-6 tablo var. Şunu diyebilirsiniz Son Eklenen İd yi al öyle ilişkilendirme yap fakat bu seferde diğer tabloları 2 kere kullanacağım hem insert hem Update olacak

    SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
  • 08-06-2015, 15:14:04
    #7
    create adlı üyeden alıntı: mesajı görüntüle
    Hocam kullanicak olduğum yöntemin

    $sql=mysql_query ("show table Status Like tabloadi");
    $cikti=mysql_fetch_assoc ($sql)
    Echo $cikti [auto increment];

    İle auto increment e gelecek olan değeri görmem gerekiyor. Çünkü bağlantı olarak 5-6 tablo var. Şunu diyebilirsiniz Son Eklenen İd yi al öyle ilişkilendirme yap fakat bu seferde diğer tabloları 2 kere kullanacağım hem insert hem Update olacak

    SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
    O zaman auto_increment ifadesine sahip bir id ve sizin id talebinizi de yedek id olarak atayarak bu soruna çözüm bulabiliriz diye düşünüyorum;

    create table idtest(
    `id` integer(15) auto_increment,
    `sid` varchar(15),
    `name` varchar(15) not null,
    primary key(id)
    );
    
    insert into idtest(sid,name)values('AB1235BC3213','test');
    
    create trigger idtrig before insert on `idtest`
    for each row
    set new.sid=(select concat('AB1235BC',(select substring((select sid from idtest order by sid desc limit 1),9,5))+1));
  • 08-06-2015, 15:18:43
    #8
    Aynı dusundeyiz hocam. Ama işte bir umut . Belki yapılabilir diye sorduydum ama olmuyor sanırım

    SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
  • 08-06-2015, 15:33:16
    #9
    create adlı üyeden alıntı: mesajı görüntüle
    Aynı dusundeyiz hocam. Ama işte bir umut . Belki yapılabilir diye sorduydum ama olmuyor sanırım

    SM-N910C cihazımdan Tapatalk kullanılarak gönderildi
    İlk yazılan kodlara göre şöyle yapsak?

    // idtest tablosundan toplam sıra sayısı alınır ve üzerine 1 eklenir, böylece yeni eklenecek sıranın hangi değerde olacağı görülür.

    select sum((select count(*)from idtest)+1) as auto_increment;
    Bunun daha pratik bir çözüm olduğu kanısındayım, yukarıdaki kulağımızı tersten tutmak gibi oldu.