Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sergionpinheiro

Datatable lento muitos registros

Recommended Posts

Bom dia galera,



Tenho um sistema que mostra os dados do banco através do uso do datatables. Até aí tudo bem, pois ele desempenha a função muito bem.



O problema é quando o volume de dados é muito grande, ele leva alguns minutos para carregar todos os dados para depois mostrar a listagem através de paginação.



Gostaria de saber se como o datatable tem um limite de paginação: 10, 25, 50 e 100, se não teria como eu limitar também a consulta ao banco e, não carrega tudo de uma vez para depois ordenar, ou seja, quero que ele carregue somente quando requisitado, tipo, 10, 15 etc.



<script type="text/javascript" charset="utf-8">

$(document).ready(function() {

$('#table').dataTable({

order: [[0, 'asc']],

displayLength: 10,

});

});

</script>


Coloquei esse displayLength: 10, isso ajuda em alguma coisa?



Valeu


Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Jack Oliveira
      Ola pessoal boa noite
       
      Vou tentar resumir da melhor forma aqui o que preciso 
       
      Seria o seguinte estou pegando os dados do banco de dados para serem listando pelo datatables usando php
       
      Ao lista todos conteudos do banco funciona normal até aqui esta perfeito
       
      Porem em outra parte que seria para os clientes que tiverem seus dados cadastros e eles mesmo forem atualizar que cada um deles veja seus dados entende?
       
      Fiz de algumas formas pensando que daria certo porem não tive resultados que preciso.
       
      Espero que possam entender o que preciso irei posta apenas a parte do que esta sendo o problema, creio que vocês que tem melhor conhecimento vai entender....
       
       
      <?php header('Content-Type: application/json'); require_once ('../database/config.php'); require_once ('../database/config.database.php'); require_once ('../database/config.session.php'); require_once('../includes/funcoes.php'); require('../controller/ssp.class.php'); $sql_details = array( 'user' => DB_USERNAME, 'pass' => DB_PASSWORD, 'db' => DB_DATABASE, 'host' => DB_HOSTNAME ); //$table = DBRead('listagem','id_user',"WHERE id_user = '".DadosSession('id')."'") //$table = 'listagem'; // Desta forma lista tudo, mais não é o que preciso /*no console sempre da erro nesta linha */$table = 'listagem','id_user',"WHERE id_user = '".DadosSession('id')."'"; // Quero que me mostra apenas cada item por usuario $primaryKey = 'id'; $columns = array( array( 'db' => 'id', 'dt' => 0, 'formatter' => function ($id, $row) { ob_start(); ?> <? //Aqui vai mais colunas ?> <?php //Aqui seria o final do código return ob_get_clean(); } ) ); $response = SSP::simple($_GET, $sql_details, $table, $primaryKey, $columns); echo json_encode($response); ?> Coloquei apenas mais o que esta sendo preciso aqui sobre o PHP
    • Por Luccas Gaulia
      O DataTables está funcionando, todos os Buttons funcionam e chamam a tabela, estou utilizando load para abrir a tabela por ajax, faz o reload normalmente, porém as demais ações não, como:
      Paginação, clica na página 2, muda as descrições abaixo e o número da página, mas não muda as linhas;
      Buscar, não funciona, porém utilizando uma busca externa com myFunction de uma coluna, funciona;
      Ordenar, não funciona, o ícone até muda para baixo ou para cima...
      O que estou entendendo que os valores puxados pelo Ajax da lista gerado pelo PHP estão estáticas e nada muda.
      Quando utilizava o foreach dentro da página e listava tudo, funciona corretamente... Estava querendo separar para poder trabalhar com reload e colocar inserir e editar com modais sem precisar atualizar a página.
      equipAll.php
      <?php include '../datasourceGestao.php'; $datasource = new datasource(); $result = $datasource->getAllEquip(); $row = array(); foreach ($result as $array) { $row[] = array('admin_id' => $array['admin_id'], 'first_name' => $array['first_name'], 'last_name' => $array['last_name'], 'email' => $array['email'], 'gender' => $array['gender'], 'birth_date' => $datasource->invertDate($array['birth_date']), 'telephone' => $array['telephone'], 'mobile' => $array['mobile'], 'nivel' => $array['nivel'], 'status' => $array['status'] ); } $output = array( "draw" => intval($_POST["draw"]), "iTotalRecords" => count($row), "iTotalDisplayRecords" => count($row), "aaData" => $row ); $response = json_encode($output); echo $response; ?> $(document).ready(function () { var table = $('#myTable').DataTable( { dom: 'Bfrtip', processing:true, serverSide:true, ajax:{ "url": "php_action/equipAll.php", "type":"POST" }, autoWidth: false, responsive: true, orderCellsTop: true, bFilter: true, fixedHeader: false, deferRender: true, pagingType: "full_numbers", lengthMenu: [ [ 10, 25, 50, -1 ], [ '10 linhas', '25 linhas', '50 linhas', 'Todos' ] ], searching: true, select: true, select: { style: 'multi+shift', }, columns: [ { data: 'admin_id' }, { data: 'action' }, { data: 'first_name'}, { data: 'last_name' }, { data: 'email' }, { data: 'gender', "defaultContent": "", "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { if("1"==sData){ $(nTd).html("<i class='fas fa-venus ze-icon-m'></i>"); } else if("2"==sData){ $(nTd).html("<i class='fas fa-mars ze-icon-m'></i>"); } else{ $(nTd).html("<i class='fas fa-venus-mars ze-icon-m'></i>"); } } }, { data: 'birth_date' }, { data: 'telephone' }, { data: 'mobile' }, { data: 'nivel', "defaultContent": "", "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { if("1"==sData){ $(nTd).html("<i class='fas fa-user-tie ze-icon-m'></i>"); } else{ $(nTd).html("<i class='fas fa-user ze-icon-m'></i>"); } } }, { data: 'status', "defaultContent": "", "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { if("2"==sData){ $(nTd).html("<i class='fas fa-toggle-on ze-icon-m'></i>"); } else{ $(nTd).html("<i class='fas fa-toggle-off ze-icon-m'></i>"); } } } ], columnDefs: [ { "targets": [ 0 ], "visible": true, "searchable": true, "data": "admin_id" }, { "targets": [ 1 ], "data": null, "defaultContent": "<div class='btn-group' role='group' aria-label='Button group with nested dropdown'><div class='btn-group' role='group'><button id='btnGroupDrop1' type='button' class='btn btn-secondary dropdown-toggle' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'><i class='fas fa-cogs ze-icon-m' aria-hidden='true'></i></button><div class='dropdown-menu' aria-labelledby='btnGroupDrop1'><button type='button' class='btn btn-link' id='Detail' name='Detail'><i class='fas fa-eye ze-icon-m' aria-hidden='true'></i></button><button type='button' class='btn btn-link' id='Edit' name='Edit'><i class='fas fa-edit ze-icon-m'></i></button><button type='button' class='btn btn-link' id='confirmDelete' name='confirmDelete'><i class='fas fa-trash-alt ze-icon-m'></i></button><button type='submit' class='btn btn-link' id ='confirmStatus' name='confirmStatus'><i class='fas fa-toggle-on ze-icon-m'></i></button></div></div></div> " }, { "targets": [ 2 ], "visible": true, "searchable": true, "data": "first_name" }, { "targets": [ 3 ], "visible": true, "searchable": true, "data": "last_name" }, { "targets": [ 4 ], "visible": true, "searchable": true, "data": "email" }, { "targets": [ 5 ], "visible": false, "searchable": true, "data": "gender", }, { "targets": [ 6 ], "visible": false, "searchable": true, "data": "birth_date" }, { "targets": [ 7 ], "visible": false, "searchable": true, "data": "telephone" }, { "targets": [ 8 ], "visible": false, "searchable": true, "data": "mobile" }, { "targets": [ 9 ], "visible": false, "searchable": true, "data": "nivel" }, { "targets": [ 10 ], "visible": false, "searchable": false, "data": "status" } ], buttons: [ { extend: '', text: '<i class="fa fa-user-plus ze-icon-gg" style="color:blue;"></i>', titleAttr: 'Novo Registro', action: function (e, node, config){ $('#myModalInsert').modal('show') } }, { extend: 'pageLength', text: '<i class="fas fa-list-ol ze-icon-gg" style="color:purple;"></i>', titleAttr: 'Mostrar', }, { extend: 'copyHtml5', text: '<i class="fas fa-copy ze-icon-gg" style="color:gray;"></i>', titleAttr: 'Copiar', key: { key: 'c', altKey: true }, exportOptions: { modifier: { page: 'current', columns: ':visible' } } }, { extend: 'excelHtml5', text: '<i class="fas fa-file-excel ze-icon-gg" style="color:green;"></i>', titleAttr: 'Excel', exportOptions: { modifier: { page: 'current', columns: ':visible' } } }, { extend: 'pdfHtml5', text: '<i class="far fa-file-pdf ze-icon-gg" style="color:red; background-color:transparent;"></i>', titleAttr: 'PDF', orientation: 'A4', //portrait or landscape alignment: 'center', pageSize: 'LEGAL', exportOptions: { columns: ':visible' } }, { extend: 'print', text: '<i class="fas fa-print ze-icon-gg" style="color:orange;"></i>', titleAttr: 'Print', exportOptions: { columns: ':visible' } }, { extend: 'colvis', text: '<i class="fas fa-columns ze-icon-gg"></i>', titleAttr: 'Alterar Colunas Visiveis', "columns": ':not(.noVis)' }, { extend: 'selectNone', text: '<i class="fas fa-th ze-icon-gg"></i>', titleAttr: 'Remover todos os selecionados' }, { extend: 'selectRows' , text: '<i class="fas fa-minus ze-icon-gg"></i>', titleAttr: 'Selecionar linha(s)' }, { extend: 'selectColumns', text: '<i class="fas fa-th-large ze-icon-gg"></i>', titleAttr: 'Selecionar coluna(s)' }, { extend: 'selectCells', text: '<i class="fas fa-object-group ze-icon-gg"></i>', titleAttr: 'Selecionar celula(s)' } ], language: { "decimal": "", "emptyTable": "Não avaliação deste registro", "info": "Mostrar de _START_ a _END_ de _TOTAL_ registros", "infoEmpty": "Mostrar 0 de 0 de 0 registros", "infoFiltered": "(Total de _MAX_ registros de entradas)", "infoPostFix": "", "thousands": ",", "lengthMenu": "Mostrar _MENU_ registros", "loadingRecords": "Carregando...", "processing": "Processando...", "search": "Buscar:", "zeroRecords": "Não há registros", "paginate": { "first": "<<", "last": ">>", "next": ">", "previous": "<" }, "loadingRecords": '&nbsp;', "processing": 'Processando...', "aria": { "sortAscending": ": Coluna ativa em ordem ascendente", "sortDescending": ": Coluna ativa em ordem descendente" }, "select": { "rows": { "_": "(Selecionado %d linhas)", "0": "(Nenhuma linha selecionada)", "1": "(Selecionado 1 linha)" }, "columns": { "_": "(Selecionado %d colunas)", "0": "(Nenhuma coluna selecionada)", "1": "(Selecionado 1 coluna)" } }, "buttons": { "copy": "Copiar para a área de transferência", "copyTitle": "Cópia bem sucedida", "copySuccess": { "1": "Uma linha copiada com sucesso", "_": "%d linhas copiadas com sucesso" } } } }); <table id="myTable" class="table table-striped table-hover display nowrap dataTable" cellspacing="0"> <thead class="thead-dark"> <th class="ze-center" data-priority="1">ID</th> <th class="ze-center" data-priority="1">Opções</th> <th class="w-50" data-priority="1">Nome</th> <th class="w-50" data-priority="1">Sobrenome</th> <th class="ze-center">E-mail</th> <th class="ze-center">Gênero</th> <th class="ze-center">Dt Nasc.</th> <th class="ze-center">Telefone</th> <th class="ze-center">Mobile</th> <th class="ze-center">Nivel</th> <th class="ze-center">Status</th> </thead> <tbody> <?php if (count($result) == 0) { ?> <td colspan="4">Não há Membros Cadastrados</td> <?php } else { foreach ($result as $array) { ?> <tr> <td><?php echo utf8_encode($array['admin_id']); ?></td> <td> </td> <td class="ze-left"> <?php echo utf8_encode($array['first_name']); ?> </td> <td><?php echo utf8_encode($array['last_name']); ?></td> <td><?php echo utf8_encode($array['email']); ?></td> <td><?php echo ($array['gender'] == 1 ? "Masculino" : "Feminino"); ?></td> <td><?php echo utf8_encode($array['birth_date']); ?></td> <td><?php echo utf8_encode($array['telephone']); ?></td> <td><?php echo utf8_encode($array['mobile']); ?></td> <td><?php echo utf8_encode($array['nivel']); ?></td> <td><?php echo utf8_encode($array['status']); ?></td> </tr> <?php } } ?> </tbody> <tfoot class="thead-dark"> <th class="ze-center">ID</th> <th class="ze-center">Opções</th> <th>Nome</th> <th>Sobrenome</th> <th class="ze-center">E-mail</th> <th class="ze-center">Gênero</th> <th class="ze-center">Dt Nasc.</th> <th class="ze-center">Telefone</th> <th class="ze-center">Mobile</th> <th class="ze-center">Nivel</th> <th class="ze-center">Status</th> </tfoot> </table>  
    • Por edionas
      Bom dia,
      a tempos venho tentando exibir o conteudo dos links abaixo na forma de tabela organizada, usando importação dos dados atraves do link:
      http://api.tcm.ce.gov.br/sim/1_0/licitacoes?codigo_municipio=002&data_realizacao_autuacao_licitacao=20100101_20100115
      http://api.tcm.ce.gov.br/sim/1_0/licitacoes.xml?codigo_municipio=002&data_realizacao_autuacao_licitacao=20100101_20100115
      http://api.tcm.ce.gov.br/sim/1_0/licitacoes.json?codigo_municipio=002&data_realizacao_autuacao_licitacao=20100101_20100115
      Porem não tenho conseguido exito.
    • Por Wesley Kovalski
      Estou usando a DataTables, e puxando os dados no banco de dados, porém está dando um erro em alguns dados que vem do banco, parece que é espaços, ou acentos, mas no console não mostra o erro!

      Erro: DataTables warning: table id=example - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1

      Alguém já teve esse tipo de erro?
    • Por fydellys
      Olá companheiros, estou desenvolvendo uma listagem de noticias com Datatables Server-side devido a aglomeração de dados futuros e estou com um pequeno problema.
       
      O problema é quando irei acrescentar os dados para as colunas no $nestedData, onde irá imprimir todos os dados somente funciona até a segunda coluna. Ocorrendo o erro: DataTables warning: table id=server-side - Requested unknown parameter '2' for row 0, column 2. For more information about this error, please see http://datatables.net/tn/4
      Caso eu adicione para imprimir a terceira coluna, dá erro! A Datatabless para. Conforme foto.
       

      JS Datatables
      <script> $(document).ready(function(e){ $('#server-side').dataTable({ "bProcessing": true, "serverSide": true, language: { processing: "Processando...", }, "ajax":{ url :"server-side/nov.php", type: "POST", }, "order": [ 0, "desc"], }); table.destroy(); table = $('#server-side').DataTable( { searching: false } ); });  
      Código PHP
      <?php require_once '../database/mysql.php'; $db = new Mysql; $params = $columns = $totalRecords = $data = array(); $params = $_REQUEST; $columns = array( 0 => 'noticia_id', 1 => 'noticia_foto', 2 => 'noticia_title', 3 => 'noticia_category', 4 => 'noticia_data', 5 => 'noticia_autor' ); $where_condition = $sqlTot = $sqlRec = ""; if( !empty($params['search']['value']) ) { $where_condition .= " WHERE "; $where_condition .= " ( noticia_title LIKE '%".$params['search']['value']."%' "; $where_condition .= " OR noticia_content LIKE '%".$params['search']['value']."%' )"; } $sql_query = "SELECT noticia_id, noticia_foto, noticia_title, noticia_category, noticia_data, noticia_autor FROM noticia "; $sqlTot .= $sql_query; $sqlRec .= $sql_query; if(isset($where_condition) && $where_condition != '') { $sqlTot .= $where_condition; $sqlRec .= $where_condition; } $sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." "; $db->query( $sqlTot )->fetchAll(); $totalRecords = $db->rows; $db->query( $sqlRec )->fetchAll(); if ($db->rows >= 1): $querys = $db->data; foreach ($querys as $query): $q = (object) $query; if ( $q->noticia_foto == "" || strlen( $q->noticia_foto ) <= 1 ) { $foto = "../images/sem-foto.jpg"; } else { $foto = "../thumb.php?img=uploads/noticias/$q->noticia_foto"; } $queryRecords = $db->rows; $nestedData = array(); $nestedData[] = $q->noticia_id; $nestedData[] = "<img src=\"$foto\" style=\"width:40px; height:30px;\" />"; // SÓ IMPRIMI ATÉ AQUI //$nestedData[] = $q->noticia_title; //$nestedData[] = $q->noticia_category; //$nestedData[] = $q->noticia_data; //$nestedData[] = $q->noticia_autor; //$nestedData[] = "Ações"; $data[] = $nestedData; endforeach; endif; $json_data = array( "draw" => intval( $params['draw'] ), "recordsTotal" => intval( $totalRecords ), "recordsFiltered" => intval( $totalRecords ), "data" => $data ); echo json_encode($json_data); ?>  
      Alguém pode me ajudar? já tentei de todas as formas possíveis mais o erro persiste! 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.