Basit bir alış veriş sepetinin mantığı.

Elimden geldiğince e-ticaret sitelerinin en önemli unsurlarından biri olan alış-veriş sepeti mantığını anlatmaya çalışacağım. Bu konuya değinmemin sebebi sürekli sorulan ve korkulan bir konu olması. Esasında oldukça basit olan bu yapıya adım atmadan önce bize neler lazım bunlara bir bakalım. 2 Adet tablo işimizi görecektir. Bunlardan biri stoklarımızın olacağı stoklar ve sepetimizde saklayacağımız bilgilerin bulunacağı sepet tablosu.

--stoklar
CREATE TABLE [stoklar] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [stokadi] nvarchar(300),
  [fiyat] decimal(10, 2) NULL,
  [parabirimi] nvarchar(5),
  PRIMARY KEY CLUSTERED ([id])
)
ON [PRIMARY]
GO

--sepet
CREATE TABLE [sepet] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [stok_id] int NULL,
  [kullanici_id] int NULL,
  [adet] int NULL,
  [eklenmezamani] datetime NULL,
  PRIMARY KEY CLUSTERED ([id])
)
ON [PRIMARY]
GO

Tablolarımız görüldüğü üzere oldukça basit, sepete ürün eklemek için yapacağımız işlem şu, stoklar tablosundaki id değerini alıp  sepet tablosundaki stok_id alanına yazmak. Sepet tablomuzda bulunan kullanici_id alanı ise sepetin hangi kullanıcıya ait olduğunu anlamamız için sepete ürün ekleyen kullanıcının id bilgisi. Genelde üye giriş yaptığı zaman bu değeri bir sessiona atıyoruz. Sepet tablosuna yeni kayıt eklerken bu bilgiyide ilgili alana yazıyoruz. Örnek bir sql cümlesi yazalım.

-- kullanıcımızın id değeri 1
-- stoklar tablomuzdaki stoğun id değeri 5
-- adetimiz ise 1 olsun

insert into sepet (stok_id,kullanici_id,adet,eklenmezamani) values ('5','1','1',getDate())

Eğer kullanıcı sepetine daha önceden eklemiş olduğu ürünü tekrar eklemek isterse adet bilgisini arttırmak içinse şöyle bir cümle işimizi görecektir.

if not exists(select id from sepet where stok_id=5 and kullanici_id=1)
	insert into sepet (stok_id,kullanici_id,adet,eklenmezamani) values ('5','1','1',getDate())
		else
	Update sepet set adet=adet+1 where stok_id=5 and kullanici_id=1

Kullanıcıya sepetindeki ürünleri göstermek içinse

	Select stoklar.stokadi,stoklar.fiyat,stoklar.parabirimi,sepet.adet from sepet,stoklar where sepet.stok_id = stoklar.id order by sepet.id desc

Kullanıcıya sepetteki ürünleri gösterirken neden stoklar tablosuna bağlanıp fiyat, para birimi ve stok adı gibi verilerini alıyoruz ? Sepete ekleme yaparken bu bilgileri de girseydik daha rahat olmazmıydı ? gibi soruları duyar gibiyim. Bunun sebebi şu, kullanıcının sepetine ürünleri eklediğini varsayalım, aradan bir zaman geçti ve ürünün fiyatı değişti aynı şekilde para birimi veya ürünün adı da değişti. Buyurun ayıklayın pirincin taşını :) Ürün kullanıcı sepetine eklendiğinde 30 liraydı 1 hafta sonra 40 lira oldu, 10 lira zarardasınız. Gösterdiğim şekilde siz stoktan herhangi bir ürünün bilgisini değiştiğinizde tüm kullanıcılar güncel stok bilgilerini görebilirler. Yani bu iki tablo bir birleriyle ilişki içerisindedir. Çok karışık olmadığını düşündüğüm bir konu, sadece kayıt ekliyoruz okadar. Bir sonraki yazıda örneklerle bu işlerimin nasıl çalıştığını, ürünlerin fiyat toplamlarını vb.. sepet işlemlerini anlatmaya çalışacağım. Umarım faydalı olur.

  • Mami Reyiz

    abi şöyle bi tasarıma apoStyLEE ne Allah için rezil herif aq