• 20-07-2018, 15:22:26
    #1
    Merhaba,

    SQL insert ve database hakkında yardıma ihtiyacım var.

    Örnek vermek gerekirse,

    Bir kitap için birden fazla kategori seçilebilir ise bunun için one to many ilişkisinin mi olması gerekiyor.

    Bunun için tablodaki kitap_id ve kategori_id 'leri birbirine eşitlemem yeterlidir sanırım.

    Insert işleminde nasıl olacak orası anlamış değilim.

    Bir kitaba ait 3 kategoriyi nasıl bir insert sorgusunda yapacağım ?
  • 20-07-2018, 16:04:53
    #2
    Bunun gibi mi ?


    Alıntı
    INSERT INTO mytable (first_name, last_name, age)
    VALUES('raj', 'sharma', '15'),
    ('kapil', 'verma', '42'),
    ('monty', 'singh', '29'),
    ('arjun', 'patel', '32');
  • 20-07-2018, 16:10:58
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Bunu 2 yöntemle yapabilirsin ilki 3 tablon olur ilki kitap diğeri kategori sonuncusu kit_kat diyebilirsin (kitap ve kategori illişkisini tutacak alan) bir kitap eklendiği zaman o kitap id si ve kategori id sini kit_kat a eklersin kitap1->korku kitap1->macera tarzında genelde kullanılan mantık budur diğer bi yöntem ise her kategori için bi db oluşturup kitap eklendiği zaman o dblere kitap id eklemek ama bu responsluğu sağlamıyor. Bu söylediklerim SQL databaseler için geçerli nonSQL lerde durum biraz daha farklılaşıyor
  • 20-07-2018, 16:13:35
    #4
    nightLord adlı üyeden alıntı: mesajı görüntüle
    Bunun gibi mi ?
    Malesef bunun gibi değil.
    Tablolar şu şekilde.
    tblKitap
    -ID
    -Adı
    -KategoriID
    tblKategori
    -ID
    -Adı
    tblKitapKategori (İlişkilendirilmiş tablo)
    -KitapID ->tblKitap.ID
    -KategoriID ->tblKategori.ID
    Uygulamada
    Textbox alanına Kitabın adı giriliyor, ve listbox 'dan örneğin 1 den fazla kategori seçilebiliyor. Bir kitaba ait 3 adet kategori olabiliyor.

    Insert into tblKitap (KitapAdi, KategoriID) values (@KitapAdı, @KategoriID)
    şeklinde yaparsam bu kategoriID alanına sadece 1 adet kategori id girebiliyorum.



    merthumoglu adlı üyeden alıntı: mesajı görüntüle
    Bunu 2 yöntemle yapabilirsin ilki 3 tablon olur ilki kitap diğeri kategori sonuncusu kit_kat diyebilirsin (kitap ve kategori illişkisini tutacak alan) bir kitap eklendiği zaman o kitap id si ve kategori id sini kit_kat a eklersin kitap1->korku kitap1->macera tarzında genelde kullanılan mantık budur diğer bi yöntem ise her kategori için bi db oluşturup kitap eklendiği zaman o dblere kitap id eklemek ama bu responsluğu sağlamıyor. Bu söylediklerim SQL databaseler için geçerli nonSQL lerde durum biraz daha farklılaşıyor
    Teşekkürler.
    Insert sorgusu ne şekilde olmalı peki?
  • 20-07-2018, 16:20:55
    #5
    bu konuda daha iyi olan arkadaşlar yardımcı olacaktır.
    ama ben olsam

    Listbox daki seçilen kayıt sayısı kadar
    Insert Into yu döndürürüm.
  • 20-07-2018, 16:25:10
    #6
    nightLord adlı üyeden alıntı: mesajı görüntüle
    bu konuda daha iyi olan arkadaşlar yardımcı olacaktır.
    ama ben olsam

    Listbox daki seçilen kayıt sayısı kadar
    Insert Into yu döndürürüm.
    Cevaplar için teşekkürler.
    KitapAdı primarykey
    ve sadece bir adet olmasını istiyorum.
  • 20-07-2018, 16:33:42
    #7
    tblKitap
    -ID
    -Adı
    tblKategori
    -ID
    -Adı
    tblKitapKategori (İlişkilendirilmiş tablo)
    -KitapID ->tblKitap.ID
    -KategoriID ->tblKategori.ID

    Tabloları yukarıdaki gibi güncellemenizi tavsiye ederim
    tblkitap a sadece id ve kitapadi ni insert edin

    MSSQL içi:

    Insert into tblKitap (KitapAdi) values (@KitapAdı);
    Insert into tblKitapKategori (KitapID ,KategoriID) values (SELECT SCOPE_IDENTITY(),@KategoriID1),(SELECT SCOPE_IDENTITY(),@KategoriID2)....;

    MYSQL için:

    Insert into tblKitap (KitapAdi) values (@KitapAdı);
    Insert into tblKitapKategori (KitapID ,KategoriID) values (LAST_INSERT_ID(),@KategoriID1),(LAST_INSERT_ID(), @KategoriID2)....;

    en yapılabiliri bu arkadaşın da dediği gibi bi forla listbox ı dönüp değerleri alman lazım

    skype : mhumoglu
  • 20-07-2018, 16:48:10
    #8
    Haklısınız kitap sekmesinde kategoriyi tutmama gerek olmayabilir zaten birden fazla kategori içeriyor.

    Alıntı
    Insert into tblKitapKategori (KitapID ,KategoriID) values (SELECT SCOPE_IDENTITY(),@KategoriID1),(SELECT SCOPE_IDENTITY(),@KategoriID2)....;
    Devam eden insert sorgusunun uzunluğunuda yine for dongusu ile yapmam gerekiyor ?
    Mesala 10 adet kategori varsa buna göre sorguyu uzatmam mı gerekiyor.

    Biraz uzun yöntemmiş gibi geldi. Tam otutturamadım kafamda.

    for dongusu ile seçilen kategori adedi kadar, sorguyu kod tarafında dondureceğim. Stored procedure 'lerle bunu kısaltmanın bir yöntemi yokmudur acaba.

    Alıntı
    Insert into tblKitapKategori (KitapID ,KategoriID) values (SELECT SCOPE_IDENTITY(),@KategoriID1),(SELECT SCOPE_IDENTITY(),@KategoriID2)........(SELECT SCOPE_IDENTITY(),@KategoriID10);
    gibi değil mi ?

    Teşekkürler.


    merthumoglu adlı üyeden alıntı: mesajı görüntüle
    tblKitap
    -ID
    -Adı
    tblKategori
    -ID
    -Adı
    tblKitapKategori (İlişkilendirilmiş tablo)
    -KitapID ->tblKitap.ID
    -KategoriID ->tblKategori.ID

    Tabloları yukarıdaki gibi güncellemenizi tavsiye ederim
    tblkitap a sadece id ve kitapadi ni insert edin

    MSSQL içi:

    Insert into tblKitap (KitapAdi) values (@KitapAdı);
    Insert into tblKitapKategori (KitapID ,KategoriID) values (SELECT SCOPE_IDENTITY(),@KategoriID1),(SELECT SCOPE_IDENTITY(),@KategoriID2)....;

    MYSQL için:

    Insert into tblKitap (KitapAdi) values (@KitapAdı);
    Insert into tblKitapKategori (KitapID ,KategoriID) values (LAST_INSERT_ID(),@KategoriID1),(LAST_INSERT_ID(), @KategoriID2)....;

    en yapılabiliri bu arkadaşın da dediği gibi bi forla listbox ı dönüp değerleri alman lazım

    skype : mhumoglu
  • 20-07-2018, 16:50:35
    #9
    maalesef en iyi şekilde böyle olabilir