• 19-03-2020, 16:44:28
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Datatable eklentisini server side olarak kullananlar ilişkili tablolarda sıralama işlemini nasıl yapıyorsunuz?
  • 19-03-2020, 16:57:07
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ilişkili tablo derken birden fazla tablo bağlantı işlemini sordunuz? sıralama derken pek anlıyamadım da

    anladığım, hangi sutunu listeleyeceksen "order": [[ 1, "desc" ]] gibi kullanımı.
  • 19-03-2020, 17:16:37
    #3
    mesela tablo içinde kategori sutunu var, burada sadece kategori id sini tutuyoruz. bu id ye göre de kategorinin adını çekiyoruz.
    sonra datatable içerisinde kategoriye göre sıralamak istediğimizde kategori adına göre değilde kategori numarasına göre sıralıyor. server side olarak çektiğimiz için müdehale nasıl edebilirim onu araştırıyorum.
  • 19-03-2020, 20:53:59
    #4
    @fiberdev; DataTable serverside özelliğinde sıralama işleminde $order değişkeni global olarak kullanılmaktadır. Burada "tablo_adi.kolon_adi" şeklinde kullanırsan göreceksin çalıştığını eğer başaramazsan direk kodu buraya eklersen sana yardımcı olurum.
  • 19-03-2020, 23:15:59
    #5
    Şu şekilde yapıyoruz hocam. firma kısmını incelerseniz görebilirsiniz.

    function firma($d){
    global $db;
    $firma = $db->from('firma')->where('id', $d)->first();
    return $firma['adi'];
    }
    
    $columns = array(
    array( 'db' => 'barkod', 'dt' => 0 ),
    array( 'db' => 'adi', 'dt' => 1 ),
    array(
    'db' => 'fiyat',
    'dt' => 2,
    'formatter' => function($d, $row){
    return number_format($d, 2, ',', '.');
    }
    ),
    array(
    'db' => 'firma',
    'dt' => 3,
    'formatter' => function($d, $row){
    return firma($d);
    }
    ),
    array(
    'db' => 'guncellemeTarihi',
    'dt' => 4,
    'formatter' => function($d, $row){
    return date( 'd/m/Y', strtotime($d));
    }
    ),
    array(
    'db' => 'id',
    'dt' => 5,
    'formatter' => function($d, $row){
    return '
    <table>
    <tr>
    <td style="padding: 2px;"><a class="btn-primary btn-sm" href="islem.php?islem=goruntule&id=' . $d . '" title="Görüntüle"><i class="fa fa-eye"></i></a></td>
    </tr>
    </table>
    ';
    }
    )
    );
  • 20-03-2020, 09:51:39
    #6
    @DPA; @Zalmoxis; Hocam merhaba cevaplarınız için teşekkürler.
    Burada ilişkili tablo derken stok adetleri için sql de toplam stok alanınını veren bir sutun yok. Sql de islemler ve adetler diye iki sutun çektim, işleme göre stok adetini php de hesaplıyorum, bunu sql yapmanın yolunu bulamadım. İsterseniz sql tablolarını da paylaşabilirim.
    $sql = "stoklar LEFT JOIN stok_kategorileri ON stok_kategorileri.id=stoklar.urunKategori LEFT JOIN stok_depolari ON stok_depolari.id=stoklar.urunDepo LEFT JOIN stok_hareketleri as sh1 ON sh1.stokid=stoklar.id GROUP BY stoklar.id ";
    
    $order = ['id','DESC'];
    $column = $_POST['order'][0]['column']; // Column index
    $columnName = $_POST['columns'][$column]['data']; // Column name
    $columnOrder = $_POST['order'][0]['dir']; // asc or desc
    
    if(isset($columnName) && !empty($columnName) && isset($columnOrder) && !empty($columnOrder)){
    $order[0] = $columnName;
    $order[1] = $columnOrder;
    }
    
    $orderby .= ' ORDER BY '.$order[0].' '.$order[1].' ';
    if($_POST["length"]!="-1"){
    $limit .= ' LIMIT '.$_POST["start"].', '.$_POST["length"];
    }
    
    $getTable = $yonetim->getJoinTable("stoklar.id, stoklar.kayitTarihi, stoklar.urunKodu, stoklar.urunAdi, stoklar.fiyat, stoklar.durum, stoklar.aciklama, stok_kategorileri.kategori, stok_depolari.kategori as raf, GROUP_CONCAT(sh1.islem) as islemler, GROUP_CONCAT(sh1.adet) as adetler",$sql.$orderby.$limit);
    
    $response = [];
    $response['data'] = [];
    $response['recordsTotal'] = $yonetim->getColumn($sql);
    $response['recordsFiltered'] = $yonetim->getColumn($sql);
    
    foreach ($getTable as $row){
    
    $stokCevaplar = explode(",", $row["islemler"]);
    $stokAdetler = explode(",", $row["adetler"]);
    
    $a=-1;
    $adet=0;
    foreach ($stokCevaplar as $sCevap){
    $a++;
    if($sCevap["islem"]=="1"){
    $adet += $stokAdetler[$a];
    }else if($sCevap["islem"]=="3"){
    $adet -= $stokAdetler[$a];
    }
    }
    
    $response['data'][] = [
    'id' => $row["id"],
    'urunAdi' => $row["urunAdi"],
    'fiyat' => $row["fiyat"],
    'adet' => $adet,
    'raf' => $row["raf"],
    'kategori' => $row["kategori"],
    ];
    }
    
    echo json_encode($response);
  • 20-03-2020, 14:17:32
    #7
    @fiberdev; yapmak istediğin şeyi tam olarak anlayamadım ilk mesajında bunları sıralamayı sormuşsun daha sonrasında sql sorgusu?
  • 20-03-2020, 14:54:58
    #8
    DPA adlı üyeden alıntı: mesajı görüntüle
    @fiberdev; yapmak istediğin şeyi tam olarak anlayamadım ilk mesajında bunları sıralamayı sormuşsun daha sonrasında sql sorgusu?
    sql olmadan php ile nasıl sıralama yapabilirim onu arıyorum. server side olduğu için sql joinler olmadan da veriyi çektiğimizde hızlı çalışıyor sorun yaratmıyor. fakat php de olmazsa mecbur sqlde joinlerle tek tablo haline getirip sıralama yaptırmak gerekiyor.
  • 20-03-2020, 14:56:42
    #9
    Şimdi birden fazla tablo var hangi kolonlara göre sıralama yapmak istiyorsun ? @fiberdev;