Merhaba arkadaşlar, Şimdi fuarlar diye bir tablom var ve tarih1 ve tarih2 alanları varchar(250).Tarihler 01.01.2005 şeklinde aralarında . olarak tutuluyor Benim yaptığım bugünün tarihini $simdi=date("d.0n.Y"); şeklinde alıyorum. Benim istediğim şey bugünün tarihi tarih1 ve tarih2 alanlarındaki değerler arasındaysa veya eşitse adi adlı alandaki veriyi çekmek.
$sqltakvim="SELECT * FROM fuarlar WHERE '$simdi'<=tarih2 ORDER BY fid LIMIT 0,10"; $sorgutakvim=mysql_query($sqltakvim,$baglanti);
şeklinde yazınca örneğin şu anki tarih 03.02.2006 veritabanındaki bir kayıt ise 02.02.2007 ise sadece 03 ile 02 yi karşılaştırıyor ve doğal olarak o veriyi çekmiyor.
bence tarih olaylarinda mktime(); fonksiyonunu kullanmalisin bu sekilde kiyaslama daha mantikli olacaktir ayrica mysql default date YYYY-MM-DD seklindedir yani ornek olarak 2006-02-02 seklinde ayrica sen tarih formatini string olarak yerine integer verirsen ozaman buyuk kucuk kiyaslamasinda sorun yasamazsin
tarih alanlarını VARCHAR olarak tutman yanlış tabi DATE olarak tutman daha makûl zira MySQL'in envai çeşit tarih fonksiyonu var bkz. date-and-time-functions örn. tarih alanların veri türü DATE olsaydı sorgu şöyle olurdu
Kod:
SELECT f.fid, f.adi FROM fuarlar AS f WHERE CURDATE() <= f.tarih2 ORDER BY f.fid,f.adi LIMIT 0, 10
mesela son 30 günün kayıtlarını çekmek istiyorsun
Kod:
SELECT f.fid, f.adi FROM fuarlar AS f WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= f.tarih2