[]

Time (php-mysql)

veritabanıma bir yerden veri atıyorum.
orda tarih kısmı şu şekilde kaydediliyor : 24/04/2012 16:00:00
tarih isimli sütunumun türü varchar.

bu tarihleri nasıl büyükten küçüğe sıralayabilirim? ya da sadece 24/04/2012 tarihinde olanları seçebilirim ya da bu gibi zamanla ilgili işlemleri yürütmek için veritabanına nasıl kaydetmeliyim?

 
sadece "24/04/2012" bu tarihte olanlari like ile secebilirsin

where tarih like '%24/04/2012%' diye.

ama siralama yapabilmek icin date'e cevirmen gerekir; order by to_date(tarih, 'DD/MM/YYYY')
  • nawres  (24.04.12 20:30:45) 
türünü varchar değilde, datetime yaparsan tarihle ilgili işlemlerin hepsini SQL sorgusunda rahatça yapabilirsin.

mesela datetime yaptığında bugün tarihlerli seçmek için şöyle bir WHERE condition'u yeter;

DATE(first_date) = DATE(NOW())

DATE() fonksiyonu Datetime ı date e çeviriyor; yani 24/04/2012 16:00:00 ı 24/04/2012 yapıyor. NOW() fonksiyonu şu anın zamanını veriyor daha sonra onu da DATE e çeviriyosun.

Büyükten küçüğe sıralamak falan için de ORDER BY yeterli olur.
  • lord esseginziki  (24.04.12 20:36:04) 
eğer saati de tutacaksan datetime kullanabilirsin yalnız mysql'de datetime şu şekilde saklanıyor,

Y-m-d H:i:s

sql'de veya php'de istediğin gibi değiştirmelisin,

belirli bir tarih seçmek için de

select where DATE(tarih) = '2012-04-24'
  • ocanal  (24.04.12 20:39:03 ~ 20:39:33) 
çekince strtotime kullan. onları bir güzel timestamp'e çevir. sonra arrayi bu timestampe gore sort et. bu şu anki yapı için çözüm.
yapıyı değiştirebiliyorsan lord eşşeğin sikinin dediğini yap.

  • serafettinn  (24.04.12 21:08:45) 
pek çok yöntem denedim ve sonunda karar kıldığım her türlü tarih verisini unix timestamp ile integer field olarak saklamak.

"INSERT INTO
table (name,phone,address,date)
VALUES ('ali','123','turkey','1335474100')"

gibi... date sütunu int(10) olacak. php'de unix timestamp'i time() fonksiyonu ile alıp direk o şekilde veritabanına kaydediyorsun. kullanıcının girişi söz konusu ise "strtotime" fonksiyonu ile unix ts'e çeviriyorsun. tarih gösterirken de "date('d/m/Y H:i:s',$ut)" işini görüyor.

avantajları:
- integer rahatlığı. mesela son bir günde kaydedilenleri getimek için sana tek lazım olan:

$busaat = time() - ( 60 * 60 * 24 )
"SELECT * FROM table WHERE date>$busaat"

ya da herhangi bir aralığı getirmek için:
"SELECT * FROM table WHERE date>$busaat AND date<$osaat"

yeniden eskiye sıralamak için:
"SELECT * FROM table ORDER BY date DESC"

- milyonlarca satır ve bir sürü tarih sütunu söz konusu ise belli bir alan tasarruffu ve performans avantajı olur.
  • blackdog  (27.04.12 00:19:34) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.