v2.5.2
Giriş yap

E-ticaret sistemi veritaban tasarım

karaman443
575 defa görüntülendi

selamün aleyküm arkadaşlar şuanda bir firmanın eticaret sistemini yazıyorum sistem 3 farklı para birimi ile çalışıyor dolar euro ve paund ve sistemde bazı özel istekleri ve bu isteklerden en önemlisi varyant fiyatların artır eksilt şeklinde değilde direk girilmesi + varyasyonlu ürünse ürüne hiç fiyat girilmeyecek ilk varyantın fiyatını çekecek gibi şimdi benim 3 adet tablom var ürünler, ürün fiyatlar ve ürün indirimler diye ürünler tablosunda ürün bilgileri, ürün fiyatlar tablosunda da 3 farklı döviz cinsinden ürün fiyatları tutuluyor.ürün indirimler tablosunda ise indirim kuralı yanı ürüne indirim tarih aralığında atanmışsa tarih aralığını stok kuralı koyulmuşsa o kural vs gibi şeyler tutuluyor. ön yüzde fiyata göre sıralamada problem olmasın diye ürün fiyatlar tablomda fiyat,indirimli fiyat ve son fiyat şeklinde 3 sütun var ön yüzde sıralama gibi işlemleri son fiyata göre yapıyorum böylece sıralama düzgün oluyor. indirim koşullarınıda yazdığım bir fonksiyonla ürünleri sayfa sayfa çekerken o saydaki ürün idlerini fonksiyona gönderip eğer tarihi gelmişse fiyatlar tablosunda indirimlifiyat kısmını nulla sonfiyat kısmını ürün fiyat sütununa güncelliyorum. buraya kadar bir sorun yok ancak kampanya sistemide isteniyor yanı atıyorum şu kategori veya ürünlerde sepette %50 indirim veya haftanın belli günlerin belli saatlerinde kategori veya ürün bazlı şu kadar indirim gibi iş bu kısımda tıkanıyor şimdi kampanya koşullarını farklı tabloda tutarım kampanyayı, kampanyalı ürün altında da gösteririm ama sıralama ürün fiyatlar tablosundaki son fiyat kısıma göre olduğu için bu sefer kampanyadaki indirimli halini hesaplatıp oraya yazdırmam gerekiyor burda nasıl yol izlemem lazım yardımcı olurmusunuz (başka yerde hatam varsa yada söyle yapsan daha iyi olur dediğiniz yer varsa önerilerinize açığım)

Cevap yaz
Cevaplar (3)
tayfuna
1061 gün önce

Kampanyalı ürünler sayfası oluşturacaksan ve her tablon farklı ise şöyle bir sorgu ortaya çıkıyor

SELECT t1.* from urunler as t1 
left join indirimli_urun as t2 on t1.urun_id=t2.urun_id 
left join kampanyali_urun as t3 on t1.urun_id = t3.urun_id 
left join firsat_urunu as t4 on t1.urun_id = t4.urun_id 
left join sepette_indirimli_urun as t5 on t1.urun_id = t5.urun_id 
where (
t2.indirimli_urun_bitis_zamani>NOW() 
or t3.kampanyali_urun_bitis_zamani>NOW() 
or t4.firsat_urunu_bitis_zamani>NOW() 
or t5.sepette_indirimli_urun_bitis_zamani>NOW()
) 
and urun_stok>'0' order by urun_stok DESC limit {$limit},{$sayfada}

Eğer ürün kartında göstermek istersen bu sorguları PHP tarafında if elseif ile sorgulayabilirsin.
Baya uğraştırıcı bir yapı şimdiden kolay gelsin.

karaman443
1062 gün önce

@zafer bey dediğiniz olduğu zaman fiyata göre sıralama işlemi nasıl olacak orasını çözebilirsek mantıklı

zafer
1070 gün önce

Yapıyı tam olarak bilmediğim için sadece fikir olması açısından yazıyorum.

Acaba son_fiyat bilgisini veritabanında tutmak yerine önyüze göndermeden önce merkezi bir fonksiyon ile her defasında hesaplamak daha dinamik bir yapı oluşturmak için daha iyi olabilir mi?

Böylece fiyatı etkileyen ne kadar kriter varsa buna göre her defasında son_fiyat yeniden hesaplanır. Bu sunucu yükünü arttırır ancak dinamik bir son_fiyat verisi elde etmeyi sağlar diye düşünüyorum.