• 20-02-2020, 19:39:37
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba arkadaşlar, takıldığım bir yer var bu konuda yardım istiyorum.

    Konu özetle şöyle;

    $sql = "SELECT * FROM servis_kayit JOIN servis_icerik ON servis_kayit.id=servis_icerik.servis_kayit_id JOIN urun ON servis_icerik.urun_id=urun.id WHERE servis_kayit.musteri_id='$q8' ";
    }
    
    $result = $link->query($sql);
    
    $sonucsayisi = $result->num_rows;
    if ($sonucsayisi > 0) { // sonuç varsa
    echo "<h3 align='center'>SERVİS KAYITLARI</H3>";
    ?>
    
    <table class="table table-striped table-hover table-bordered">
    <thead>
    <tr>
    <th>Servise Geliş Tarihi</th>
    <th>Teslim Tarihi</th>
    <th>Yapılan İşlem</th>
    </tr>
    </thead>
    <tbody>
    <?php while($row2 = $result->fetch_assoc()){ ?>
    <tr>
    <td><? echo tarihDuzenle($row2['alis_tarih']); ?></td>
    <td><? echo tarihDuzenle($row2['teslim_tarih']); ?></td>
    <td><? echo $row2['marka']; ?> <? echo $row2['urun_adi'];?> <? echo $row2['miktar'];?> <? echo $row2['fiyat'];?> <? $sayi1=$row2['miktar']; $sayi2=$row2['fiyat']; $toplam=$sayi1*$sayi2; echo $toplam; ?></td>
    </tr>
    <?php } ?>
    </tbody>
                 </table>
    buradan da


    şeklinde sonuç çıkıyor.

    ancak ben gelen sonucun


    şeklinde olmasın istiyorum. tarihi tekrar etmesine bir gerek yok. onu yok etmem lazım.

    nasıl bir yol izlemeliyim

    teşekkürler
  • 20-02-2020, 19:43:29
    #2
    SQL sorgulamanızda GROUP BY tarih şeklinde birleştirme yapabilirsiniz
  • 20-02-2020, 20:04:10
    #3
    Misafir adlı üyeden alıntı: mesajı görüntüle
    SQL sorgulamanızda GROUP BY tarih şeklinde birleştirme yapabilirsiniz
    Group by yapınca tarih dışındaki sonuçlar da tek satır olarak geliyor
  • 20-02-2020, 20:38:07
    #4
    İf kontrolü ile aynı tarihli sonuçları aynı bölüme yazdırabilirsin ayrıca ayıklama için for döngüsğ de kullanabilirsin
  • 20-02-2020, 22:06:47
    #5
    suatbuyukboz adlı üyeden alıntı: mesajı görüntüle
    İf kontrolü ile aynı tarihli sonuçları aynı bölüme yazdırabilirsin ayrıca ayıklama için for döngüsğ de kullanabilirsin
    mesela?
  • 20-02-2020, 23:11:00
    #6
    Şöyle kısaca özetleyebiliyirim. Bir önceki çekilen ürünün giriş tarihi ile şu an çekilen ürünün giriş tarihi aynı olursa aynı <th> içerisine yazdırsın işlemi. Php ile çok ilgilenmediğimden yapıları vb. şeyleri bilmiyorum o yüzden tam yardımcı olamıyorum ama kısaca mantık bu şekilde kurdum kafamda.
  • 21-02-2020, 00:22:52
    #7
    suatbuyukboz adlı üyeden alıntı: mesajı görüntüle
    Şöyle kısaca özetleyebiliyirim. Bir önceki çekilen ürünün giriş tarihi ile şu an çekilen ürünün giriş tarihi aynı olursa aynı <th> içerisine yazdırsın işlemi. Php ile çok ilgilenmediğimden yapıları vb. şeyleri bilmiyorum o yüzden tam yardımcı olamıyorum ama kısaca mantık bu şekilde kurdum kafamda.
    peki bilmediğin bir konuda neden yorum yapıyorusun?
  • 21-02-2020, 01:05:21
    #8
    //veritabanından gelen bilgiler bu şekidle olsun
    $sonuc = [
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 1'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 2'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 3']
    ];
    
    $table = [];
    
    // burada while ile veritabanından gelen sonuçları düzenleyeceksiniz, aynı tarihe sahip olanları aynı dizide toplayabilirsiniz.
    //tek şart giriş tarihi değil hem giriş hemde teslim tarihi aynı olmalı diyorsanız $table[$row['giris'].$row['teslim']][] = $row; tarzında değiştirebilirsiniz.
    foreach ($sonuc as $row){
    $table[$row['giris']][] = $row;
    }
    
    //ikinci bir döngü ile şekillendirdiğiniz diziyi tablo haline getireceksiniz.
    echo '<table>';
    foreach ($table as $tr){
    echo '<tr>';
    echo '<td rowspan="'.count($tr).'">'.$tr[0]['giris'].'</td>';
    echo '<td rowspan="'.count($tr).'">'.$tr[0]['teslim'].'</td>';
    echo '<td>'.implode('<br>', array_column($tr, 'islem')).'</td>';
    echo '</tr>';
    }
    echo '</table>';
  • 21-02-2020, 22:56:52
    #9
    Met adlı üyeden alıntı: mesajı görüntüle
    //veritabanından gelen bilgiler bu şekidle olsun
    $sonuc = [
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 1'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 2'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 3']
    ];
    
    $table = [];
    
    // burada while ile veritabanından gelen sonuçları düzenleyeceksiniz, aynı tarihe sahip olanları aynı dizide toplayabilirsiniz.
    //tek şart giriş tarihi değil hem giriş hemde teslim tarihi aynı olmalı diyorsanız $table[$row['giris'].$row['teslim']][] = $row; tarzında değiştirebilirsiniz.
    foreach ($sonuc as $row){
    $table[$row['giris']][] = $row;
    }
    
    //ikinci bir döngü ile şekillendirdiğiniz diziyi tablo haline getireceksiniz.
    echo '<table>';
    foreach ($table as $tr){
    echo '<tr>';
    echo '<td rowspan="'.count($tr).'">'.$tr[0]['giris'].'</td>';
    echo '<td rowspan="'.count($tr).'">'.$tr[0]['teslim'].'</td>';
    echo '<td>'.implode('<br>', array_column($tr, 'islem')).'</td>';
    echo '</tr>';
    }
    echo '</table>';
    Öncelikle kafamı açığın için teşekkür ederim. Dün akşamdan beri anlamaya çalışıyorum. Şimdi mümkünse bir kaç sorum olacak. Öğrene öğrene şu işi çözmek istiyorum.

    $sql = "SELECT * FROM servis_kayit JOIN servis_icerik ON servis_kayit.id=servis_icerik.servis_kayit_id JOIN urun ON servis_icerik.urun_id=urun.id WHERE servis_kayit.musteri_id='$q8' ";
    
    $result = $link->query($sql);
    
    $sonucsayisi = $result->num_rows;
    şeklinde sorgum var. Sonuç sayısı geldimi işimi yapmaya başlıyor.

    Şimdi bunu senin verdiğin örneğe bağlarken ufak bir sorun yaşadım (daha doğrusu tam olayı anlamadım)

    //veritabanından gelen bilgiler bu şekidle olsun
    $sonuc = [
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 1'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 2'],
    ['giris' => '05-12-2019', 'teslim' => '05-02-2020', 'islem' => 'işlem 3']
    ];
    
    $table = [];
    dediğin noktadan önce ben while ile mi bütün herşeyi çekmem lazım onu anlayamadım. Yani bu 'giris' => dediğin bölgeye (ki yanda tarih vermişsin mesela) veri nereden nasıl gelecek onu anlayamadım. Bu noktada ufak bir yardım rica edecem akabinde devam edip parça parça kafa ütülerim