folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder Farklı Para Birimlerine Ait Fiyat Bilgisinin Sıralanması [DB]



Farklı Para Birimlerine Ait Fiyat Bilgisinin Sıralanması [DB]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Yine hem ayranımızın dökülmeden hemde tatsız olaylar yaşanmadan çözülmesi gereken bir sorun ile karşınızdayım.

    E-Ticaret sitesinde ürünlerin fiyatlarının farklı para birimleri ile kayıt edilmesi gerekiyor. Örneğin A ürünün fiyatı 10 EUR, B ürünün fiyatı 50 TRY gibi. Bu şekilde baktığımızda ürün tablosuna "currency" adında bir kolon tanımlayarak ve buraya EUR, TRY, USD gibi döviz cinsini ekleterek çözebiliyoruz görünüyor. Ancak işler fiyata göre sıralama kısmında karışıyor. Ürünleri kullanıcının seçtiği yada sistem tarafından varsayılan para birimine göre sıralama yapmaya kalktığımızda (fiyata göre artan-azalan) işler sarpa sarıyor. Şöyleki normal şartlarda sorguda "order by" bölümünde hesaplama yaptırıp (price*currency_ratio (10 x 7.9)) bu şekilde sıralama yaptırabiliyoruz. Ancak bu şekilde sıralama yaptığımızda veritabanı (mysql) fiyat kolonu indexini kullanamıyor ve temporary bir tablo oluşturup buraya alıp burada sıralama yapıyor ve buda ciddi performans kaybına sebep ve kaynak kullanımına sebep oluyor.

    Aklıma farklı farklı şeyler geliyor ancak her biri farklı yerlerden sorun teşkil ediyor ve içime sinen bir çözüm bulamadım. Siz olsanız bu durumda nasıl bir geliştirme yapardınız?

    *Ek: Diğer açık kaynak e-ticaret projelerini inceledim gördüğüm kadarıyla hepsi default platform para birimi ile ürün kaydı yaptırıyor, daha sonra görüntüleme kısmında seçilen para birimine göre fiyatları hesaplayıp gösteriyor. Ben bu şekilde yapamıyorum çünkü farklı entegrasyonlardan gelen ürünler var bunlar farklı para birimleri ile geliyor. 

    *Not:

    DB: MySQL

    Dil: PHP

    Framework: Laravel

    TeRRoR tarafından 25/Eyl/20 09:35 tarihinde düzenlenmiştir

    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SettingZ
    SettingZ's avatar
    Kayıt Tarihi: 30/Mayıs/2012
    Homo

    aklıma gelen ilk çözümü söyliyim belki fikir verir hocam;

     

    yeni bir kolon aç ve burada tek bir para biriminden tut değerleri sıralamayı da bu kolona göre yap 50 EUR 400 tl şeklinde bu kolonu sıralayıp normal fiyatını gösterdiğinde hız anlamında ciddi kolaylık yaşarsın gibi geldi bana


    Fortçu Gandalf..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    SettingZ bunu yazdı

    aklıma gelen ilk çözümü söyliyim belki fikir verir hocam;

     

    yeni bir kolon aç ve burada tek bir para biriminden tut değerleri sıralamayı da bu kolona göre yap 50 EUR 400 tl şeklinde bu kolonu sıralayıp normal fiyatını gösterdiğinde hız anlamında ciddi kolaylık yaşarsın gibi geldi bana

    Hocam öncellikle fikrin için teşekkürler. Bahsettiğin şekilde platform'un döviz cinsine göre ayrı bir kolonda kayıt tuttuğumda döviz kuru değiştiğinde tüm kayıtlarda bu kolonları güncellemem gerekiyor. Şuanda 500k kayıt var ve artıyor-artacak. 500k kaydı topluca güncellemekten çekiniyorum açıkçası :/


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    interfector
    interfector's avatar
    Kayıt Tarihi: 14/Haziran/2011
    Homo

    Tüm fiyatları sabit bir para birimine göre girişini yap daha sonra merkez bankası kuru veya el ile girdiğiniz kura göre ekrana yazdırabilirsiniz diye düşünüyorum. Örn. A ürünü 50 $, B ürünü değeri 70 TL. Siz ikisinide Dolar kuru üzerinden db kaydedeceksiniz daha sonra ürünün görüntülenecek para birimini seçeceksiniz. Bu size performans tarafında yardımcı olacaktır. En basit ve kolay yol olarak aklıma bu geldi hocam.


    Aldanma insanların samimiyetine, menfaatleri için gelirler vecde, vaad etmeseydi allah cenneti, ona bile etmezlerdi secde..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    coder2
    coder2's avatar
    Kayıt Tarihi: 15/Mart/2007
    Erkek

    Currency model/tablosunda para birimlerini tutardım.

    ExchangeRate model/tablosunda günlük çalışıp güncel kurları tutardım.

     

    Eğer sabit sayıda para birimi olacaksa Product tablosunda accessor ile para birimlerinin çevirisini yapıp appends ederdim. 

    Para birimi çoğalma durumu varsa model içinde istediğim para birimine convert edecek bir method yazardım. 

    Sonrasında ise orderBy yaparak para birimine göre sıralatırdım.

     

    coder2 tarafından 25/Eyl/20 10:31 tarihinde düzenlenmiştir

    Önceleri Kızlar Utanınca Kızarırdı Şimdilerde Kızarınca Utanıyorlar..
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    farklı para birimi ile gelenleri de şöyle yap. bir lira kolonu olsun. Mesela a ürünü 5 euro, onu dbye lira = 5 * 9 diye ekle. b ürünü 6 dolar, onu dbye lira = 6 * 8  olarak ekle. Aslında tüm ürünlerini varsayılan olarak lira karşılığı olarak ekle. Dünyadaki para birimlerinin birbirine karşı değerleri çok değişmediği için (bizimki hariç) döviz kuru değişse bile sıralamada çok fazla bir değişiklik olacağını düşünmüyorum.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo

    döviz kuru dakka başı değişen bir şey değil (değişse bile sıralamanı etkileyecek kadar değişmez) , yaz bir cron 30dk da bir ürünlerin fiyatını baz olarak kabul ettiğin kura göre hesaplayıp yazsın bi kolona. sonra o kolona göre sıralarsın.


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NoktaliVirgul
    NoktaliVirgul's avatar
    Kayıt Tarihi: 02/Temmuz/2007
    Erkek

    Bence en mantıklısı; varsayılan olarak bir parabirimi seçip bir kolonda o cinsten tutup ona göre sıralama yapılabilir. TL karşılığını bir kolonda tut, saatlik cron ile güncelle. sıralamayı TL kolona göre yap, gösterirken dolar fiyatını göster.

    ---

    Diğer bir yöntem; sıralama yapınca tüm para birimlerinde grup grup sıralansa? Mesela fiyata göre sıralama yapınca en başta tl olanları küçükten büyüye, sonra usd olanları küçükten büyüğe sıralasa?

    ----

    Woocommerce gibi hazır sistemler nasıl hallediyor acaba bu sorunu?


    If my calculations are correct, when this baby hits eighty-eight miles per hour... you"re gonna see some serious shit.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Herkese teşekkürler. Fiyat kolonunu varsayılan para biriminde tutup ekstra kolonda doviz halini tutup ayrıca ürünü doviz birimi ile ilişkilendirdim. Belirli aralıklarla cron job ile döviz*kur ile fiyat kolonunu güncellicem. Umarım yarın bir gün UPDATE 2 gün sürüyor nasıl optimize ederiz diye konu açmam.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    TeRRoR bunu yazdı

    Herkese teşekkürler. Fiyat kolonunu varsayılan para biriminde tutup ekstra kolonda doviz halini tutup ayrıca ürünü doviz birimi ile ilişkilendirdim. Belirli aralıklarla cron job ile döviz*kur ile fiyat kolonunu güncellicem. Umarım yarın bir gün UPDATE 2 gün sürüyor nasıl optimize ederiz diye konu açmam.

    şimdiden stored procedure ile update et hacı. ya da direkt kura göre where yap

    "update table set `tl_karsilik` = doviz_fiyat*7.75where `doviz` = 'USD'"

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    yolbulucu bunu yazdı
    TeRRoR bunu yazdı

    Herkese teşekkürler. Fiyat kolonunu varsayılan para biriminde tutup ekstra kolonda doviz halini tutup ayrıca ürünü doviz birimi ile ilişkilendirdim. Belirli aralıklarla cron job ile döviz*kur ile fiyat kolonunu güncellicem. Umarım yarın bir gün UPDATE 2 gün sürüyor nasıl optimize ederiz diye konu açmam.

    şimdiden stored procedure ile update et hacı. ya da direkt kura göre where yap

    "update table set `tl_karsilik` = doviz_fiyat*7.75where `doviz` = 'USD'"

     

    hocam store procedure önermenin özel bir sebebi varmı?


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//