Merhaba,
Datatable eklentisini server side olarak kullananlar ilişkili tablolarda sıralama işlemini nasıl yapıyorsunuz?
datatable server side sıralama
12
●324
- 19-03-2020, 17:16:37mesela 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, 23:15:59Ş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@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:54:58sql 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.DPA adlı üyeden alıntı: mesajı görüntüle