Nueva pregunta

Pregunta:

Fecha: 18-10-2016 17:54:57 (En Español)

Problema con Bootstrap DataTables, no respeta el orden del resultado MySQL ORDER BY[Resuelta]

Buenas noches, estoy desarrollando sobre el framework bootstrap y me encuentro con un inconveniente al usar dataTables.bootstrap.min.js", ya que la tabla me sale bien sin errores la paginación y el campo de busqueda son correctos, pero el resultado ordenado desde mysql no funciona, he uscado por toda la web y no encuentro la razon de este problema

este es mi codigo de la consulta

<table id="example1" class="table table-bordered table-striped">
                    <thead>
                              <tr>
                       
                          <th>Date</th>
                        <th>Source</th>
<?php
$stmt = $db_con->prepare("SELECT calldate,payed,clid,src,dst,billsec FROM calls WHERE date BETWEEN '$date1' AND '$date2' AND  disposition = 'ANSWERED' ORDER BY calldate DESC");
 $stmt->execute();
		while($row=$stmt->fetch(PDO::FETCH_ASSOC))
		{
		  ?>
		<td><?php echo $row['calldate'];  ?></td>
            <td><?php echo  $row['src'];   ?></td>
		</tr>
			<?php
		}
		
		?>
        </tbody>

          </table>	



Gracias.
este es el script del datatables

<script>
      $(function () {
        $("#example1").DataTable();
        $('#example2').DataTable({
          "paging": true,
          "lengthChange": false,
          "searching": false,
          "ordering": true,
          "info": true,
          "autoWidth": false
        });
      });
    </script>

Etiquetas: Bootstrap - Javascript - MySQL - PHP - Pregunta - Tabla HTML Votos: 3 - Respuestas: 12 - Vistas: 21 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 19-10-2016 03:48:23 Lo que pasa es que desde la base de datos viene ordenado, pero al utilizar datatable y al ponerle "ordering": true, lo que hace datatable es volver a ordenar teniendo como parámetro la primera columna, la ventaja es que al darle click a las flechitas de las columnas te va ordenando por columna, pero si quieres así como esta en tu consulta debes de ponerle "ordering": false;   Votos: 3 - Link respuesta
     
  • Fecha: 19-10-2016 10:35:16 Alexis hice lo que me dices y no sigue sin ordenarlo, pero si tu tienes razón esas flechistas son de lo mejor :)   Votos: 1 - Link respuesta
     
  • Fecha: 19-10-2016 13:53:30 Hola
    No te lo ordena?
    Has probado con phpmyadmin o algun otro gestor de bases de datos a la consulta (query)?
    Algo como:
    SELECT Nombre, Apellido, FechaNacimiento FROM empleado WHERE FechaNacimiento BETWEEN "1980-01-01" AND "1990-12-31" ORDER BY FechaNacimiento DESC  


    El siguiente query es distinto muestra el mismo resultado, aunque prefiero el anterior
    SELECT Nombre, Apellido, FechaNacimiento FROM empleado WHERE FechaNacimiento >= "1980-01-01" AND FechaNacimiento <= "1990-12-31" ORDER BY FechaNacimiento DESC 


    Es a modo de ejemplo ya que deberás adaptarlo a tu query.

    Trata de hacer una consulta sql simple para ir viendo los resultados que arroja y luego ir agregando de apoco otras condiciones hasta obtener el resultado deseado. Una vez obtenido ya podrás hacerlo con PHP sabiendo cual es la query.

    En el ejemplo que doy en la consulta anterior listo a todos los empleados que hayan nacido entre 1980-01-01 y 1990-12-31, que lo ordene de la fecha mas reciente a la mas antigua es decir del año 1990 al año 1980.

    Tener en cuenta que las fechas es con formato YYYY-MM-DD (AÑO-MES-DIA)

    Luego agregue una condición mas a la consulta. Que ademas de lo anterior solo me listen los del sexo masculino que en la lógica de mi tabla 1 es masculino 2 es femenino.

    Queda conformada la query de la siguiente manera:
    SELECT Nombre, Apellido, FechaNacimiento FROM empleado WHERE FechaNacimiento BETWEEN "1980-01-01" AND "1990-12-31" AND Sexo = 1 ORDER BY FechaNacimiento DESC 


    Otra cosa que he observado es que filtras las fechas por medio de la columna date y luego la ordenas por el campo calldate
    Tal vez no era por la columna que querías ordenar. Tal ve querías ordenar por la columna date

    Siguiendo con mi ejemplo haciendo una analogía al tuyo.
    SELECT Nombre, Apellido, FechaNacimiento FROM empleado WHERE FechaNacimiento BETWEEN "1980-01-01" AND "1990-12-31" AND Sexo = 1 ORDER BY FechaRegistro DESC  

    Esta query filtra entre fechas de nacimiento con sexo 1 que es masculino perooo que lo ordene de manera DEsCendente por la fecha de registro que es muy distinta a la fecha de nacimiento por la cual filtre por lo tanto el resultado es distinto a los ejemplos anteriores.

    Notar que la palabra clave DESC aplica sólo a la columna nombrada que le precede.

    Cualquier cosa nos dices.
    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 19-10-2016 14:55:09 Hola si el me ordena si lo hago con una tabla simple o con mi gestor de bases de datos lo hace correctamente, intente de la
    Manera que me dices y sigue igual, la fecha calldate es con la que quiero ordenar ya que está tiene hora, la
    Fecha date solo tiene el valor fecha, no sé qué pueda estar pasando pero en unos scripts anteriores si me funcionaba, los fuy a mirar hoy y tienen el Mismo Problema, ahora no se que pudo pasar
      Votos: 1 - Link respuesta
     
  • Fecha: 19-10-2016 15:48:34 No he usado datatables, en este tema lamentablemente no te puedo aportar mucho.
    Pero sabiendo que el query arroja los resultados esperados, lo que yo haría es hacer un script simple sin utilizar el script del datatables.
    Es decir hacer un script puro de php y a lo sumo incluir HTML para crear una tabla para desplegar los datos devueltos por el query.

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 21-10-2016 20:03:57 El problema no es datatables, yo lo uso y lo orden bien y he realizado consultas más complejas pero cuando ordenas por un campo fecha, el orden no es tan orden. DataTables no influye en el ordenamiento aun con ordering en true. Este atributo indica si permitis que se ordenen haciendo click en la cabecera de la columna correspondiente

    Seguiria el consejo de Walter
      Votos: 1 - Link respuesta
     
  • Fecha: 22-10-2016 17:30:40 Efectivamente tomé el consejp de walter Gracias a Todos !   Votos: 1 - Link respuesta
     
  • Fecha: 25-10-2016 12:08:22 Bueno ya se que está como resulta, pero lo correcto es usar la documentación de data tables, el cual puedes ordernar la columna que requieras de manera ascendente o descendente, las columnas las toma apartir de 0 para la primera columna como en un arregglo, dejo link de la documentacion https://datatables.net/examples/basic_init/table_sorting.html y dejo el codigo
           $(function () {
            $("#example1").DataTable();
            $('#example2').DataTable({
              "order": [[ 0, "desc" ]],
              "paging": true,
              "lengthChange": false,
              "searching": false,
              "ordering": true,
              "info": true,
              "autoWidth": false
            });
          }); 
      Votos: 1 - Link respuesta
     
  • Fecha: 26-10-2016 17:25:09 De nada Bryan, espero que logres encontrar la solución a tu problema.

    Aunque ya se encuentra como RESUELTA.

    Sobre el uso de datatables se me genera la inquietud de que si carga todos los registros en el DOM, es decir en el navegador, con algunas decenas de registros tal vez no haya problemas.
    Pero que pasa si la respuesta de la consulta a la base de datos esta contiene miles de registros?
    Creo que ello sobrecargaria al DOM y haría que colapse el navegador.

    Espero que alguien que este utilizando datatables me pueda responder este interrogante.

    Saludos
      Votos: 1 - Link respuesta
     
  • Fecha: 26-10-2016 18:08:51 Efectivamente Walter, yo limito a los últimos 1000 registros, es preferible incorporarle un filtro por consulta sql, ya sea con ajax para complementar el uso de datatables.   Votos: 2 - Link respuesta
     
  • Fecha: 26-10-2016 18:54:08 DataTables tiene o se le puede asignar ciertos valores a los atributos que tiene. Uno de ellos es serverSide. Este atributo puede recibir dos valores true o false.

    Si es false, te llena el datatables con la cantidad de registros completo. Si son muchos, se complica el asunto. Es decir, este atributo lo que indica es que no se realiza nada del lado del servidor

    En cambio, si es true, si realizo los filtros, el paginado, etc del lado del servidor. Para ello, esta librería da un ejemplo de como realizar el listado, filtrado, paginación del lado del servidor con un scritp php

    Dejo el link

    https://datatables.net/examples/data_sources/server_side.html

    Saludos

    DIEGO
      Votos: 3 - Link respuesta
     
  • Fecha: 28-10-2016 10:56:21 Walter, yo hice una prueba con una tabla de 700000 mil registros y funciono perfecto no se bloqueó, al igual en la documentación hablan que depende de como se haga la consulta y que se ha probado con 20 millones de filas y no genera ningun problema con el DOM   Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com