• 20-01-2015, 18:34:17
    #1
    Merhaba arkadaşlar,
    aşağıdaki şekilde bir SQL tablosu bulunan bir sistem mevcut.

    tablo adı : ücretler
    baslangic,bitis,fiyat


    elimde bulunan veri ise.

    20.01.2015====28.01.2015====50
    29.01.2015====09.02.2015====75


    Kullanıcı takvim aracılığı ile, 21.01.2015 ila 03.02.2015 tarih aralığını seçtiğinde ödemesi gereken tutar. Baştan sona 50 TL üzerinden hesaplanıyor ama ayın 28'inden sonra 50 TL yerine 75'ten hesaplaması gerekiyor.

    Yardımcı olacak arkadaşlara şimdiden teşekkürler.
  • 20-01-2015, 19:05:30
    #2
    Üyeliği durduruldu
    Merhaba,

    Bende benzer bir konu açmıştım. Sanırım yardımcı olacaktır.

    https://www.r10.net/php/1384834-php-d...hesaplama.html
  • 20-01-2015, 21:12:21
    #3
    Öncelikle tarihlerini database içinde date formatında tutmalısın y-m-d şeklinde 2015-09-10 gibi sonra Sql sorgunda date1 BETWEEN date2 şeklinde çekebilirsin bu tarih aralıklarında ne istiyorsan. Kodların hepsini yazmıyorum anladığını umuyorum.

    İyi çalışmalar.
  • 21-01-2015, 09:13:12
    #4
    miyagisan adlı üyeden alıntı: mesajı görüntüle
    Öncelikle tarihlerini database içinde date formatında tutmalısın y-m-d şeklinde 2015-09-10 gibi sonra Sql sorgunda date1 BETWEEN date2 şeklinde çekebilirsin bu tarih aralıklarında ne istiyorsan. Kodların hepsini yazmıyorum anladığını umuyorum.

    İyi çalışmalar.
    çeşitli şekillerde denedim üstadım, between (<), (>) hepsinde 50 tl olan ücreti bastırdı ekrana, 75 tl olan değeri hesaba katmadı.
  • 21-01-2015, 18:40:41
    #5
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    çeşitli şekillerde denedim üstadım, between (<), (>) hepsinde 50 tl olan ücreti bastırdı ekrana, 75 tl olan değeri hesaba katmadı.
    Tekrar selam,
    Şu şekilde yaparsan iki tarih arasında istediğin verileri alabilirsin.

    $veriyial = mysql_query("select * from fiyatlar WHERE tarih BETWEEN '".$tarih1."' AND '".$tarih2."'");
    
    while ($al=mysql_fetch_array($veriyial)) {
    	$id = $al['fiyat'] ;
    // ...... // }
    gibi.. Kolay gelsin.

    Ayrıca sanırım toplamını istiyorsun iki tarih arasının o da şu şekilde
    $toplam = mysql_query("SELECT SUM(fiyat) as toplam FROM fiyatlar WHERE tarih BETWEEN '".$tarih1."' AND '".$tarih2."'"); $veri=mysql_fetch_array($toplam,MYSQL_BOTH);  
    echo $veri['toplam'];
    bu da iki tarih arasının toplamını verecektir.
  • 22-01-2015, 19:54:36
    #6
    miyagisan adlı üyeden alıntı: mesajı görüntüle
    Tekrar selam,
    Şu şekilde yaparsan iki tarih arasında istediğin verileri alabilirsin.

    $veriyial = mysql_query("select * from fiyatlar WHERE tarih BETWEEN '".$tarih1."' AND '".$tarih2."'");
    
    while ($al=mysql_fetch_array($veriyial)) {
    	$id = $al['fiyat'] ;
    // ...... // }
    gibi.. Kolay gelsin.

    Ayrıca sanırım toplamını istiyorsun iki tarih arasının o da şu şekilde
    $toplam = mysql_query("SELECT SUM(fiyat) as toplam FROM fiyatlar WHERE tarih BETWEEN '".$tarih1."' AND '".$tarih2."'"); $veri=mysql_fetch_array($toplam,MYSQL_BOTH);  
    echo $veri['toplam'];
    bu da iki tarih arasının toplamını verecektir.
    üstadım teşekkür ederim ancak yine en düşük veya en yüksek fiyatı almakta.

    Problemi ben farklı bir şekilde 2011'de bulunan bir sistemimdeki şekilde çözdüm.

    2100'e kadar tarih bastırarak çözdüm
  • 23-01-2015, 01:33:50
    #7
    bende mysql date fonksiyonlarıyla uğraşmamak için önceden kendim şu mantıkla yapıyordum

    yeni bir kolon oluşturuyorsunuz örnek duztarih diye değerini int olarak ayarlayın

    tarikleri ise hiç bir karakter kullanmadan şu şekilde ekleyin

    20150123

    yani yıl ay gün şeklinde bitiş olsun
    bundan sonra basit büyü küçük işaretiyle yani between kullanarak iki tarih arasını çekebilirsiniz sorunsuz yada and kullanarak iki koşul-şart belirterek

    fakat mysqlda date format ve fonksiyonları boşuna yapılmamış date formatlarıyl işlemleri yapmak en mantıklısı
  • 23-01-2015, 01:37:58
    #8
    Syntax hatası yapmamışsam eğer, en az sorgu ile işini bitirmek için aşağıdaki kodları kullanman daha sağlıklı olur

    $baslangic=$temp_bas= $_POST['baslangic'];
    $bitis= $temp_bit = $_POST['bitis'];
    
    $toplam=0;
    $cek=true;
    while($cek) {
    $sorgu=mysql_query("SELECT fiyat,bitis FROM ücretler WHERE baslangic<='$temp_bas' AND bitis>='$bitis'");
    $veri=mysql_fetch_assoc($veri);
    $toplam+=$veri['fiyat'];
    if($veri['bitis']>=$bitis)
    $cek=false;
    else {
    $temp_bas_time=strtotime(date('d.m.Y',$veri['bitis']));
    $temp_bas_time+=24*60*60;
    $temp_bas=mktime(0, 0, 0, date("n", $temp_bas_time), date("j", $temp_bas_time), date("Y", $temp_bas_time) );
    }
    }
    yalnız uyarayım, bu şekilde düzgün çalışsa da tam yaz zamanına veya kış zamanına geçişlerde sorun yaşayabilirsin. aslında çözümü çok basit ama onu da sana bırakayım date('I',$veri['bitis']) ile date('I',$temp_bas) lar birbirine eşit mi kontrol edip eşit değilse 1 saat eklemen veya çıkartman gerekir. Bunu mktime satırından önce yaparsan hiç bir sorun yaşamaman gerekir
  • 23-01-2015, 17:30:22
    #9
    Seyranli adlı üyeden alıntı: mesajı görüntüle
    Syntax hatası yapmamışsam eğer, en az sorgu ile işini bitirmek için aşağıdaki kodları kullanman daha sağlıklı olur

    $baslangic=$temp_bas= $_POST['baslangic'];
    $bitis= $temp_bit = $_POST['bitis'];
    
    $toplam=0;
    $cek=true;
    while($cek) {
    $sorgu=mysql_query("SELECT fiyat,bitis FROM ücretler WHERE baslangic<='$temp_bas' AND bitis>='$bitis'");
    $veri=mysql_fetch_assoc($veri);
    $toplam+=$veri['fiyat'];
    if($veri['bitis']>=$bitis)
    $cek=false;
    else {
    $temp_bas_time=strtotime(date('d.m.Y',$veri['bitis']));
    $temp_bas_time+=24*60*60;
    $temp_bas=mktime(0, 0, 0, date("n", $temp_bas_time), date("j", $temp_bas_time), date("Y", $temp_bas_time) );
    }
    }
    yalnız uyarayım, bu şekilde düzgün çalışsa da tam yaz zamanına veya kış zamanına geçişlerde sorun yaşayabilirsin. aslında çözümü çok basit ama onu da sana bırakayım date('I',$veri['bitis']) ile date('I',$temp_bas) lar birbirine eşit mi kontrol edip eşit değilse 1 saat eklemen veya çıkartman gerekir. Bunu mktime satırından önce yaparsan hiç bir sorun yaşamaman gerekir

    Üstadım bu mantıklada en düşük yada en yüksek fiyatı çekmekte.
    Yapmış olduğum işlem ise aşağıdadır. Fiyat kırılmalarını da hesaba katmak için.