[]
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?
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')
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.
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'
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.
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.
"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