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
[/html]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())
[/html]

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
[/html]

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
[/html]
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.

Yorum yapın


[ Ctrl + Enter ]