none
Siparis Detaylarını Nasıl Gösterebilirim. RRS feed

  • Soru

  • Selamlar veritabanımda siparişler tablom kullanıcının sipariş ettiği ürünlerin ID'lerini araya virgül koyarak bi kolonda topluyorum sipariş oluşturuyorum.
    Burada sıkıntı yok daha sonra kullanıcı siparişlerim bölülümden siparişlerinin detayları görüntüleye tıklayınca siparişie ait ürünleri göstermek istiyorum. Gelen ürün idlerini split ederek diziye alıyorum burdan sonra nasıl bir yol izlemeliyim? 
    • Düzenleyen TyfnCtn 2 Mayıs 2014 Cuma 13:19
    2 Mayıs 2014 Cuma 13:14

Yanıtlar

  • Merhabalar;

    Yaptığınız çok yanlış bu şekilde tek bir kolana birden fazla ürünün id değerini yazmayın veritabanı mantığına da aykırı.

    Onun yerine Siparisler, SiparisDetayları şeklinde tablo yapın 

    Siparişler           -> SiparisId, SiparisTarihi, MusteriId, vs.

    SiparisDetaylari -> DetayId,SiparisIdUrunId,Miktar,MiktarTur(kg,adet,cm,vs),BirimFiyat,vs.

    Bu şekilde yapın ve bir siparişe ait olan ürünleri siparişDetay tablosu içine ekleyiniz.

    Çekerkende SiparisId ve MusteriId değerine göre hangi müşteri hangi siparişinde ne almış gibi siz alanları çolaltınız ben örnek olsun diye bir kaç tane yazdım.

    NOT: Siz tek kolonda yazdığınız zaman iki tane satıldı dersiniz bu bir ürünü değil, bir kolona eklediğiniz tüm ürünlerin 2 tane satılmış gibi algılanmasını sağlar ve ayırt edemezsiniz. O yüzden temel parçalara ayırarak yaparsanız yönetilebilirlik artar ve veri karışıklığını en aza indirmiş olursunuz.

    Daha doğrusu varsa arkadaşlar paylaşırsa daha iyi olur.

    Kolay gelsin.


    Yunus Emre ALTINAY




    2 Mayıs 2014 Cuma 13:28
  • Yunus Emre Altınay'ın dediği gayet doğru, veritabanı yapısına aykırı. Yalnız sorunun tam cevabı değil. Eğer Yunus beyin dediği şekilde yaparsan, ürün detayları için bir inner join komutu yazman gerekli sql sorgunun içine. Siparişlerini sergilemek için yazacağın örnek sql kodu;

    select * from siparisler inner join siparisdetay on siparisler.ID = siparisdetay.siparisID where siparisler.kullaniciID = @aktifkullaniciidsi

    Seçtiğin ürünün detaylarını verecek örnek sql kodu;

    select * from siparisdetay inner join urunler on urunler.ID = siparisdetay.urunID where siparisler.ID = @secilenurunidsi

    böylece istediğin şeyi yapmış olacaksın.

    Eğer Yunus beyin dediği yoldan gitmeyip kendi yolundan devam edeceksen de, diziye aldığın ürün id lerini ikinci sorgu ile birleştirip karşılığını alacaksın.

    Kolay gelsin.


    • Düzenleyen Atakan Savaş 2 Mayıs 2014 Cuma 14:51
    • Yanıt Olarak İşaretleyen TyfnCtn 2 Mayıs 2014 Cuma 15:05
    2 Mayıs 2014 Cuma 14:49

Tüm Yanıtlar

  • Merhabalar;

    Yaptığınız çok yanlış bu şekilde tek bir kolana birden fazla ürünün id değerini yazmayın veritabanı mantığına da aykırı.

    Onun yerine Siparisler, SiparisDetayları şeklinde tablo yapın 

    Siparişler           -> SiparisId, SiparisTarihi, MusteriId, vs.

    SiparisDetaylari -> DetayId,SiparisIdUrunId,Miktar,MiktarTur(kg,adet,cm,vs),BirimFiyat,vs.

    Bu şekilde yapın ve bir siparişe ait olan ürünleri siparişDetay tablosu içine ekleyiniz.

    Çekerkende SiparisId ve MusteriId değerine göre hangi müşteri hangi siparişinde ne almış gibi siz alanları çolaltınız ben örnek olsun diye bir kaç tane yazdım.

    NOT: Siz tek kolonda yazdığınız zaman iki tane satıldı dersiniz bu bir ürünü değil, bir kolona eklediğiniz tüm ürünlerin 2 tane satılmış gibi algılanmasını sağlar ve ayırt edemezsiniz. O yüzden temel parçalara ayırarak yaparsanız yönetilebilirlik artar ve veri karışıklığını en aza indirmiş olursunuz.

    Daha doğrusu varsa arkadaşlar paylaşırsa daha iyi olur.

    Kolay gelsin.


    Yunus Emre ALTINAY




    2 Mayıs 2014 Cuma 13:28
  • Yunus Emre Altınay'ın dediği gayet doğru, veritabanı yapısına aykırı. Yalnız sorunun tam cevabı değil. Eğer Yunus beyin dediği şekilde yaparsan, ürün detayları için bir inner join komutu yazman gerekli sql sorgunun içine. Siparişlerini sergilemek için yazacağın örnek sql kodu;

    select * from siparisler inner join siparisdetay on siparisler.ID = siparisdetay.siparisID where siparisler.kullaniciID = @aktifkullaniciidsi

    Seçtiğin ürünün detaylarını verecek örnek sql kodu;

    select * from siparisdetay inner join urunler on urunler.ID = siparisdetay.urunID where siparisler.ID = @secilenurunidsi

    böylece istediğin şeyi yapmış olacaksın.

    Eğer Yunus beyin dediği yoldan gitmeyip kendi yolundan devam edeceksen de, diziye aldığın ürün id lerini ikinci sorgu ile birleştirip karşılığını alacaksın.

    Kolay gelsin.


    • Düzenleyen Atakan Savaş 2 Mayıs 2014 Cuma 14:51
    • Yanıt Olarak İşaretleyen TyfnCtn 2 Mayıs 2014 Cuma 15:05
    2 Mayıs 2014 Cuma 14:49
  • teşekkürler yaıtlarınız doğrultusunda şu şekilde iki tablo oluşturdum

    create table Orders(
    Id int Primary key identity(1,1),
    SipNo varchar(100),
    UyeId int,
    Durumu varchar(50),
    Tarihi datetime,
    Tutar money,
    )
    go
    
    create table OrderDetails(
    Id int Foreign key (Id) References Orders(Id),
    UrunId int,
    Fiyat money,
    OdemeTuru varchar(100),
    Durumu varchar(50),
    KargoFirm varchar(100),
    KargoNo varchar(50),
    Ipadresi varchar(50),
    )
    

    2 Mayıs 2014 Cuma 14:58
  • Orders tablosundaki SipNo alanı OrderDetails tablosunda olması gerekli ki ilişkiyi kurabilesin aralarında. Onun dışında ben bir eksik görmedim. Belirttiğim sql kodlarını şekillendirirsen işine yarayabilirler.
    2 Mayıs 2014 Cuma 15:00
  • aslında onları koydum sonra sildim direk ilişkiyi Idler arasında kurarım diye ama haklısınız sağ kulağımı sağ elle tutmak varken sol elle tutmak zorunda kalacağım daha sonra Atakan Savaş yantınızı için teşekkür ederim ekliyorum



    • Düzenleyen TyfnCtn 2 Mayıs 2014 Cuma 15:12
    2 Mayıs 2014 Cuma 15:05