Neden/Nasıl Yanlış Veri Saydırıyor?
Bu şekilde kodum var. Bunda hiç problem yok. Bugün üye sayısı 1 olmalı çünkü veri tabanında öyle bir kayıt yok ama bana 29 kişi bugün üye oldu diyor. Çok enteresan bir olay.
Bu da sitemin "sözde kendim için hazırladığım analizi" https://www.girisimzel.com/merhabaekrani.php
Girdiğiniz anda saçma sapan bir şeyin döndüğünü anlayacaksınız ama onun neden kaynaklandığını ve nasıl çözeceğimi bulamadım.
<?php
$sorgu = $db->prepare("SELECT COUNT(*) FROM uyeler WHERE DAY(uye_tarih) = DAY(CURDATE())");
$sorgu->execute();
$say = $sorgu->fetchColumn();
echo $say;
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
Kodda hatalar var ancak ondan önce şunu belirtmek istiyorum, Mysql sunucunun timezone'u muhtemelen Türkiye'den farklıdır ondan kaynaklı kaymalar olur. Düzeltmek için hesap kodlarından önce şunu yazın:
$db->exec("SET time_zone='+03:00';");
Bugünkü satırları çekmek için:
select count(*) as total from uyeler where DATE(uye_tarih) = CURDATE()
Bu haftaki kayıtları çekmek için (son 7 gün değil! hafta başından itibaren):
select count(*) as total from uyeler where YEARWEEK(uye_tarih, 1) = YEARWEEK(CURDATE(), 1)
Not: Burada 1 parametresi haftayı pazartesinden başlatmak için.
Bu ayki kayıtları çekmek için (son 30 gün değil! ay başından itibaren):
select count(*) as total from uyeler where MONTH(uye_tarih) = MONTH(CURDATE()) AND YEAR(uye_tarih) = YEAR(CURDATE())
Bu yıl kayıtları çekmek için (son 365 gün değil! yıl başından itibaren):
select count(*) as total from uyeler where YEAR(uye_tarih) = YEAR(CURDATE())
bugün kayıt olanları almak için şunu kullan
select count(*) as total from uyeler
where date(uye_tarih) = curdate()
Aydınlandım resmen. Hemen yanıtları beğendim test etmeden. Test edince yine hata çıktı sanırım ben kodu yazamadım.
bunu deneyince 0 gösteriyor halbuki 19 saat önce 1 kişi üye olmuştu. 1 olması gerek. Aynı şeyi yıl içinde yapınca olmuyor. 0 gösteriyor. Bir yere yıl yazmamız gerek:
Bu yüzden şöyle yazdım.
```DATE(uye_tarih) = YEAR(CURDATE())```
olmadı. Günde de olmuyor.
Tam tersini denedim.
```YEAR(uye_tarih) = DATE(CURDATE())```
yine çalışmadı. Acaba date koymayacakmıyız diye düşündüm.
```YEAR(uye_tarih) = CURDATE()```
Yine çalışmadı. Tam tersini de denedim.
```uye_tarih = YEAR(CURDATE())```
Sonuç yine aynı.
Çözemedim. :)
mantık olarak 15'inde kayıt olmuşları sayıyor bu kod, yani bu 15 aralıkta olabilir 15 ocakta o yüzden 29 çıkıyordur sayı :)