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.
2 Tarih Arasındaki Toplam Ucreti Çekmek
8
●1.276
- 20-01-2015, 19:05:30Üyeliği durdurulduMerhaba,
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 - 21-01-2015, 09:13:12çeşitli şekillerde denedim üstadım, between (<), (>) hepsinde 50 tl olan ücreti bastırdı ekrana, 75 tl olan değeri hesaba katmadı.miyagisan adlı üyeden alıntı: mesajı görüntüle
- 21-01-2015, 18:40:41Tekrar selam,PiEycPi adlı üyeden alıntı: mesajı görüntüle
Ş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üstadım teşekkür ederim ancak yine en düşük veya en yüksek fiyatı almakta.miyagisan adlı üyeden alıntı: mesajı görüntüle
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:50bende 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:58Syntax 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:22Seyranli adlı üyeden alıntı: mesajı görüntüle
Ü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.