-
Üyelik
27.03.2017
-
Yaş/Cinsiyet
28 / E
-
Meslek
öğrenci
-
Konum
İstanbul Avrupa
-
Ad Soyad
O** G**
-
Mesajlar
174
-
Beğeniler
6 / 4
-
Ticaret
0, (%0)
merhabalar,
veritabanına tarih ve saati kayıt ediyorum tablo biçimi varchar
tablo biçimini datetime felan yaptım kayıtda hata verdi
tarih verilerini nasıl kayıt edersem daha sağlıklı olur
-
Üyelik
14.01.2018
-
Yaş/Cinsiyet
52 / E
-
Meslek
Programcı
-
Konum
İzmir
-
Ad Soyad
S** S**
-
Mesajlar
319
-
Beğeniler
4 / 111
-
Ticaret
0, (%0)
Tarih bilgilerini sql de integer olarak kaydetmek en iyisi. int(11).
unix time stamp olarak kayıt edersen istediğin her şekilde kullanırsın, veri tabanında çok yer kaplamaz, iki tarih arası işlem yaparken performansı yüksek olur.
unix time stamp 1 ocak 1970 ten itibaren şu ana kadar geçen saniyeyi belirten bir değerdir. Her saniye artar. time() fonksiyonu ile o andaki time_stamp ı alabilirsın.
string olarak gönderdiğin (19.01.2018) değerini strtotime ile int e çevirebilir int olarak sağladığın değeri date(d.m.Y,$time) olarak okunabilir hale getirebilirsin.
1 kişi bu mesajı beğendi.
-
Üyelik
19.04.2015
-
Yaş/Cinsiyet
26 / E
-
Meslek
Developer
-
Konum
İstanbul Avrupa
-
Ad Soyad
E** E**
-
Mesajlar
821
-
Beğeniler
1 / 302
-
Ticaret
1, (%100)
O kısmı iyi düşünmek lazım, ihtiyaç nedir? Ne için kullanılacak? Ne kadar lazım?
Eğer basit bir tarih verisi istiyorsan, örneğin blog için düşünecek olursak yazılma tarihi yıl ay gün şeklinde yeterlidir, biraz daha derine ineyim saat dk sn de ekleyeyim dersen varchar veta date işini görecektir.
Esasen date SQL sorgularında kıyaslama yapmanı kolaylaştırır, şu iki tarih aralığında ara veya son şu kadar tarih içindeki verileri getir derken SQL motorundan yararlanacaksın, php tarafında sadece verileri okuman yeterli olacak.
Bana göre biraz daha detaylı işlerde en sağlıklı kayıt biçimi tarihi bütünsel olarak ele alabileceğim bir veridir, yani geriye dönük işlemleri gelecekte daha iyi yorumlayabileceğim şekilde olmalı. Fotoğrafların raw halini düşünebilirsin, getdate() fonksiyonu ile her şeyi çekebilirim. Sonra array şeklinde dönen içeriği json_encode() ile encode edip veritabanında text olarak kaydederim.
json_encode(getdate())
Bu sayede farklı tarih yorumları için farklı sütunlar açamadan json içinde bütün işimi görürüm. PHP tarafında küçük fonksiyonlarla tarih verisini istediğim gibi biçimlendirmem mümkün, tabi bu kısımlar işin angarya kısmı oluyor ama esnek tarih verisi gerekliyse bence değer.
function getFullDateFromJSON($jsonvalue){
$datearr = json_decode($jsonvalue);
return date('Y-m-d H:i:s', strtotime($datearr->year.'-'.$datearr->mon.'-'.$datearr->mday.' '.$datearr->hours.':'.$datearr->minutes.':'.$datearr->seconds));
}
Esnek tarih verisi ne işime yarayacak?
Admin ve kullanıcı panelinde kullanıyorum genelde, 27 Şubat 2018'de Saat 12:12'de şu ticket açıldı, son kayıt 29 Şubat 2018 Çarşamba 12:12 AM, 44 dk önce, 4 yıl 3 ay 2 hafta önce vesair şeklinde yeniden biçimlendirebiliyorum.
no time for caution
-
Üyelik
18.06.2015
-
Yaş/Cinsiyet
37 / E
-
Meslek
Senior Email Marketing Special
-
Konum
İstanbul Avrupa
-
Ad Soyad
O** K**
-
Mesajlar
2209
-
Beğeniler
100 / 548
-
Ticaret
4, (%100)
Hedefleme yapacaksanız datetime yapmanız lazım yani yıl ay gün şeklinde yok hedefleme olmayacak ise varchar işini görür
-
Üyelik
14.01.2018
-
Yaş/Cinsiyet
52 / E
-
Meslek
Programcı
-
Konum
İzmir
-
Ad Soyad
S** S**
-
Mesajlar
319
-
Beğeniler
4 / 111
-
Ticaret
0, (%0)
Tabi neden olmasın ki, base64 encode etsekte olur yani. maksat fonksiyon kullanmak olsun.
Diyelimki 20 plasiyerimiz var. her gün bir güzergah ta satış yapıyorlar. Ben bu arkadaşların satışlarını aylık olarak seçip gün gün tek karşılaştırmak istiyorum. 30 bin satır datayı işleyeceğim.
Şimdi benim dediğime göre database den 4 byte veriyi çekmek var veya senin dediğine göre 30 bin tane json_decode çalıştıracağım.
Yaptığın işin esnek bir tarafı yok. Kendi ayağına dolanıyorsun.
unix_timestamp şu anın tüm zaman verisini timezone olmadan tutar.
yani
echo date('d.m.Y H:i:s',time());
işte sen o time() ı int olarak sql de tutuyorsun. Çok merak ettim. json ile paketlediğin zaman verisini nasıl ayrıabiliyorsun.
Yani geçen hafta kaç kere login olmuş bu user desem, o kullanıcının tüm verisini çekip sonra json decode edip sonra gerekli zamanları bulup kalanları ayırmak mı daha kolay
$baslangıç = strtotime('01.01.2018');
$baslangıç = strtotime('07.01.2018');
select count(id) where user_id = 1 and time_recod >= $baslangıç and time_record <= $bitiş;
gibi bir şey mi daha kolay.
Unutma programcılıkta basit zordur.
-
Üyelik
14.01.2018
-
Yaş/Cinsiyet
52 / E
-
Meslek
Programcı
-
Konum
İzmir
-
Ad Soyad
S** S**
-
Mesajlar
319
-
Beğeniler
4 / 111
-
Ticaret
0, (%0)
Nerede nasıl kullanıcağına göre değişir. Kaç aşama var ? Kaç ürün var. bu tarih verilerini ilerde nasıl kullanacaksın ? Saat içeriyormu sadece gün mü ? vb
-
Üyelik
14.01.2018
-
Yaş/Cinsiyet
52 / E
-
Meslek
Programcı
-
Konum
İzmir
-
Ad Soyad
S** S**
-
Mesajlar
319
-
Beğeniler
4 / 111
-
Ticaret
0, (%0)
O zaman yaptığın en doğrusu. id, elbise_id, islem, islem_zamani gibi bir şey işini görür.
id elbise_id ve isleme index verirsin olabildiği kadar hızlı olur artık bundan sonrası senin sql bilgine kalmış.