• 21-09-2023, 21:29:19
    #1
    Merhaba php ile vardiya sistemi geliştirmeye çalışıyorum. Örnekteki gibi bir tablo yapıp kaydettiğimde mysql veritabanına yazdıracağım.



    İlk etapta kayıt değilde girdiğim verileri tabloya çekmeye çalışıyorum. Veritabanını bu şekilde hazırladım.

    İçeriklerinide bu şekilde hazırladım.

    personel


    vardiya_turu


    vardiya



    Tabloyu inner joinle birleştirdim. Şöyle bir ekran çıktısı aldım.



    Burada Ahmet çıktısını benim yatayda günlere yaymam gerekiyor. Yani Ahmet 1 tane çıkıp, pazartesi - salı - çarşamba vs.. alanlara doldurmak istiyorum. Bunun için nasıl bir yol izlemeliyim. Yani gelen veriyi bir arraya depolayıp oradan mı çekmem lazım. Yoksa her bir sütunda sorgumu çalıştırmam lazım. Yardımcı olursanız çok sevinirim.
  • 21-09-2023, 21:32:09
    #2
    laravel ile yapmanı tavsiye ederim özellikle relationship bazlı uygulamalarda çok hızlı proje geliştirme imkanı sunuyor.
  • 21-09-2023, 21:35:18
    #3
    Hocam bir öneri getireyim.
    ahmet x işinde pazartesi 20:00 da işe girsin
    Salı günü sabah 08:00 de çıkış yapsın

    ahmet çarşamba günü Y işinde sabah 8 de girsin akşam 8 de çıksın

    mehmet Y işine pazartesi akşam 8 de girsn salı sabah 8 de çıksın
    Gibi farklı işler farklı giriş çıkış saatleri vs eklersen bende satın alırım senden bunu

    hatta mesaiye kaldı şukadar saat gibi. Ay sonunda kim kaç saat çalışmış nekadar mesai yapmış ayrı bir yerde gösterse dadından yenmez
  • 21-09-2023, 21:39:49
    #4
    Alpsolist adlı üyeden alıntı: mesajı görüntüle
    laravel ile yapmanı tavsiye ederim özellikle relationship bazlı uygulamalarda çok hızlı proje geliştirme imkanı sunuyor.
    laravel malesef şu an için bilmiyorum. İleriki zamanlarda öğreneceğinim. Şu anda framework kullanmadan yapmam lazım. Teşekkür ederim.
  • 21-09-2023, 21:41:47
    #5
    bilal adlı üyeden alıntı: mesajı görüntüle
    Hocam bir öneri getireyim.
    ahmet x işinde pazartesi 20:00 da işe girsin
    Salı günü sabah 08:00 de çıkış yapsın

    ahmet çarşamba günü Y işinde sabah 8 de girsin akşam 8 de çıksın

    mehmet Y işine pazartesi akşam 8 de girsn salı sabah 8 de çıksın
    Gibi farklı işler farklı giriş çıkış saatleri vs eklersen bende satın alırım senden bunu

    hatta mesaiye kaldı şukadar saat gibi. Ay sonunda kim kaç saat çalışmış nekadar mesai yapmış ayrı bir yerde gösterse dadından yenmez
    Öneriniz için teşekkür ediyorum. Fakat şu anki sisteme göre seçmeli ve mümkün olduğunca yalın bir şekilde yapmam gerekiyor.
  • 22-09-2023, 12:22:33
    #6
    Şöyle bir örnek yaptım hızlıca, çıktısı da aşağıda, performansa odaklanmadım, hızlıca tablette yazdım:



    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            table{border-collapse:collapse;border:1px solid #ccc;}
            table td, table th{border:1px solid #ccc;padding:4px 6px}
        </style>
    </head>
    <body>
    <?php
    try {
        $db = new PDO("mysql:host=127.0.0.1;dbname=test;port=3306;charset=utf8", 'root', '');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $sth = $db->query("SELECT p.*, v.vardiya_tarihi, vt.vardiya_aciklama FROM personel AS p
        INNER JOIN vardiya AS v ON (v.personel_id = p.personel_id)
        LEFT JOIN vardiya_turu AS vt ON (vt.vardiya_turu_id = v.vardiya_turu_id)
        WHERE v.vardiya_aktif=1
        ORDER BY p.personel_id ASC, v.vardiya_tarihi ASC");
        $personeller = $sth->fetchAll(PDO::FETCH_OBJ);
    
        $sth = $db->query("SELECT vardiya_tarihi FROM vardiya WHERE vardiya_aktif=1 GROUP BY vardiya_tarihi ORDER BY vardiya_tarihi");
        $vardiyalar = $sth->fetchAll(PDO::FETCH_OBJ);
        $toplam_vardiya = $sth->rowCount();
    
        $results = [];
    
        foreach($personeller as $personel) {
            $results[$personel->personel_id]['ad_soyad'] = $personel->personel_ad . ' ' . $personel->personel_soyad;
            $results[$personel->personel_id]['vardiyalar'][] = ['tarih'=>$personel->vardiya_tarihi, 'aciklama'=> $personel->vardiya_aciklama];
        }
    
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    ?>
    
    
    <table>
        <tr>
            <th>PERSONELLER</th>
            <?php foreach($vardiyalar as $vardiya): ?>
                <th><?php echo $vardiya->vardiya_tarihi; ?></th>
            <?php endforeach; ?>
        </tr>
        <?php foreach($results as $personel): ?>
        <tr>
            <td><?php echo $personel['ad_soyad']; ?></td>
            <?php foreach($personel['vardiyalar'] as $vardiya): ?>
                <td><?php echo $vardiya['aciklama']; ?></td>
            <?php endforeach; ?>
            <?php for($i=0;$i<($toplam_vardiya-count($personel['vardiyalar']));$i++): ?>
                <td></td>
            <?php endfor; ?>
        </tr>
        <?php endforeach; ?>
    </table>
    
    
    
    </body>
    </html>
  • 22-09-2023, 12:25:27
    #7
    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Şöyle bir örnek yaptım hızlıca, çıktısı da aşağıda, performansa odaklanmadım, hızlıca tablette yazdım:



    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            table{border-collapse:collapse;border:1px solid #ccc;}
            table td, table th{border:1px solid #ccc;padding:4px 6px}
        </style>
    </head>
    <body>
    <?php
    try {
        $db = new PDO("mysql:host=127.0.0.1;dbname=test;port=3306;charset=utf8", 'root', '');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $sth = $db->query("SELECT p.*, v.vardiya_tarihi, vt.vardiya_aciklama FROM personel AS p
        INNER JOIN vardiya AS v ON (v.personel_id = p.personel_id)
        LEFT JOIN vardiya_turu AS vt ON (vt.vardiya_turu_id = v.vardiya_turu_id)
        WHERE v.vardiya_aktif=1
        ORDER BY p.personel_id ASC, v.vardiya_tarihi ASC");
        $personeller = $sth->fetchAll(PDO::FETCH_OBJ);
    
        $sth = $db->query("SELECT vardiya_tarihi FROM vardiya WHERE vardiya_aktif=1 GROUP BY vardiya_tarihi ORDER BY vardiya_tarihi");
        $vardiyalar = $sth->fetchAll(PDO::FETCH_OBJ);
        $toplam_vardiya = $sth->rowCount();
    
        $results = [];
    
        foreach($personeller as $personel) {
            $results[$personel->personel_id]['ad_soyad'] = $personel->personel_ad . ' ' . $personel->personel_soyad;
            $results[$personel->personel_id]['vardiyalar'][] = ['tarih'=>$personel->vardiya_tarihi, 'aciklama'=> $personel->vardiya_aciklama];
        }
    
    } catch (PDOException $e) {
        die($e->getMessage());
    }
    ?>
    
    
    <table>
        <tr>
            <th>PERSONELLER</th>
            <?php foreach($vardiyalar as $vardiya): ?>
                <th><?php echo $vardiya->vardiya_tarihi; ?></th>
            <?php endforeach; ?>
        </tr>
        <?php foreach($results as $personel): ?>
        <tr>
            <td><?php echo $personel['ad_soyad']; ?></td>
            <?php foreach($personel['vardiyalar'] as $vardiya): ?>
                <td><?php echo $vardiya['aciklama']; ?></td>
            <?php endforeach; ?>
            <?php for($i=0;$i<($toplam_vardiya-count($personel['vardiyalar']));$i++): ?>
                <td></td>
            <?php endfor; ?>
        </tr>
        <?php endforeach; ?>
    </table>
    
    
    
    </body>
    </html>
    Ne diyeceğimi bilemiyorum. Çok ama çok teşekkür ederim. Hemen inceliyorum.