• 25-12-2020, 21:25:05
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Veritabanımda datetime tipinde tarih (giriş ve çıkış olarak iki farklı sütünda) verilerimi tutuyorum. Bana bunların arasındaki fark lazım.

    Örneğin

    SELECT TIMEDIFF(giris_tarihi,cikis_tarihi) AS tarihfark FROM bisiklet_takip WHERE barkod='$q5' AND giris_tarihi IS NOT NULL
    şeklinde sorgulatınca aradaki farkı bana

    tarihfark
    12:34:56
    410:22:57

    şeklinde bir sonuç veriyor. Ben buradaki sonuçtan 2 kez çalıştığını birisinin 12 saat 24 dakika 56 saniye ve diğerininde 410 saat çalıştığını anlıyorum. Buraya kadar bir sorun yok ama asıl sorun burada başlıyor

    1 - Bu gelen sonucu php de nasıl toplatırım?
    2- 24 saatten az gelen sonucu 24 olarak kabul etmesini (daha doğrusu gelen her sonucun 24 saaten az olan kısmını 24 saate yuvarlatmam gerekiyor ki bana saatten ziyade gün sayısı lazım 12 saat çalışan aslında 1 gün çalışmış oluyor ya da 50 saat çalışan aslında 3 gün çalışmış oluyor) nasıl sağlarım

    PS1: DATEDIFF ile de yapılabilir diye düşündüm ama 24 saatten az oldumu 0 olarak sonuç döndürüyor o da benim işime gelmiyor açıkcası
    PS2: İşi sorguyla çözeyim diyorum TIMEDIFF(giris_tarihi,cikis_tarihi) /(1/86400) diyince saçma sapan sonuçlar geliyor

    Fikirlerinizi bekliyorum
  • 25-12-2020, 22:01:19
    #2
    $toplamSaat  = 0;
    foreach($tarihfark as $tarih){
        $tarihParca = explode(':', $tarih);
        $toplamSaat += 24 - ($tarihParca[0] % 24) + $tarihParca[0];
    }
    $toplamSaat / 24 gün sayısı
  • 25-12-2020, 23:17:53
    #3
    <?                                                
    $sql8="SELECT TIMEDIFF(giris_tarihi,cikis_tarihi) AS tarihfark FROM bisiklet_takip WHERE barkod='$q5' AND giris_tarihi IS NOT NULL;";                                              
     $result8= $link->query($sql8);                                              
     $vericek=$result8->fetch_assoc();                                                                                                                                                
    
    $toplamSaat  = 0;                                                
    foreach($vericek AS $tarih) {                                                
    $tarihParca = explode(':', $tarih['tarihfark']);                                                    
    $toplamSaat = 24 - ($tarihParca[0] % 24) + $tarihParca[0];                                                                                                                                                            
    }                                                  
    echo $toplamSaat;
                                                    ?>
    şeklinde yaptım ama
    Warning: Illegal string offset 'tarihfark' in /home/...

    şeklinde hata aldım
  • 25-12-2020, 23:33:18
    #4
    foreach döngüsünü veri çekme while döngüsü ile değiştirin düzelecektir.
  • 25-12-2020, 23:55:56
    #5
    <?                                                
    $sql8="SELECT TIMEDIFF(giris_tarihi,cikis_tarihi) AS tarihfark FROM bisiklet_takip WHERE barkod='$q5' AND giris_tarihi IS NOT NULL;";                                              
     $result8= $link->query($sql8);                                                                                                
    $toplamSaat=0;                                                
    
    while($row8 = $result8->fetch_assoc()) {                                                                                                        
    $tarihParca = explode(':', $row8['tarihfark']);                                                    
    $toplamSaat = 24 - ($tarihParca[0] % 24) + $tarihParca[0];                                                                                                                                                          
    }
    echo $toplamSaat ;
                                                   
    ?>
    şeklinde yine hata verdi ama bu kez neden verdi anlamadım ( PHP Parse error: syntax error, unexpected '}' in )

    Sorgumu değiştirdim

    <?                                                
    $sql8="SELECT HOUR(TIMEDIFF(giris_tarihi,cikis_tarihi)) AS tarihfark FROM bisiklet_takip WHERE barkod='$q5' AND giris_tarihi IS NOT NULL;";                                                
    $result8= $link->query($sql8);                                                                                                
    $toplam=0;                                                
    while($row8 = $result8->fetch_assoc()) {                                                                                                        
    $toplam= $toplam+($row8['tarihfark']);                                                                                                     
    } 
    echo ceil($toplam/24) ;
                                                    
    ?>
    şeklindeyken sonuç veriyor. 1-2 satırlık sonuç geldiğinde yukarı yuvarlama ile doğru sonuç veriyor ama satır sayısı 8-10 veya daha yüksek oldumu gelen sonuç hatalı olacak o kesin
  • 26-12-2020, 02:56:30
    #6
    Tablonuzdan iki satırlık bir çıktı paylaşır mısınız, SQL kodu ile çözebileceğimiz bir şey gibi duruyor.
  • 26-12-2020, 10:04:09
    #7
    Sorgu:
    $sql8="SELECT HOUR(TIMEDIFF(giris_tarihi,cikis_tarihi)) AS tarihfark FROM bisiklet_takip WHERE barkod='$q5' AND giris_tarihi IS NOT NULL;";
    Herhangi bir barkod kullanınca sqlden dönen sonuç:

    tarihfark
    12
    410
    48

    $toplam=0;                                                
    while($row8 = $result8->fetch_assoc()) {                                                                                                        
    $toplam= $toplam+($row8['tarihfark']);                                                                                                    
    } echo ceil($toplam/24) ;
    Buradan aldığım sonuç: 20

    Gerçekte ulaşmam gereken sayı
    12 => 1
    410 => 18
    48 => 2
    Toplam: 21
  • 26-12-2020, 15:36:47
    #8
    Şu işinizi çözecektir o zaman

    $toplam=0;
    while($row8 = $result8->fetch_assoc()) {
         $saat = ceil($row8['tarihfark']/24);
         $toplam += $saat;
    }
    echo $toplam;
  • 26-12-2020, 16:27:46
    #9
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Şu işinizi çözecektir o zaman

    $toplam=0;
    while($row8 = $result8->fetch_assoc()) {
         $saat = ceil($row8['tarihfark']/24);
         $toplam += $saat;
    }
    echo $toplam;

    Hata yapsın diye baya uğraştım ama her seferinde doğru hesapladı