Foros del Web » Programando para Internet » PHP »

Ordenacion de datos en tabla a partir de SQL

Estas en el tema de Ordenacion de datos en tabla a partir de SQL en el foro de PHP en Foros del Web. Buenas, mi problema es que tengo una tabla ("FACTURAS") con una serie de campos, entre ellos el campo ("FECHA"), pues bien llevo todo el día ...
  #1 (permalink)  
Antiguo 10/02/2014, 17:07
 
Fecha de Ingreso: octubre-2010
Mensajes: 45
Antigüedad: 13 años, 6 meses
Puntos: 0
Ordenacion de datos en tabla a partir de SQL

Buenas, mi problema es que tengo una tabla ("FACTURAS") con una serie de campos, entre ellos el campo ("FECHA"), pues bien llevo todo el día intentado hacer la siguiente tabla:

Factura1 | 30€ |
Factura2 | 15€ | 09/02/2014 (rowspan 3)
Factura3 | 56€ |
--------------------
Factura4 | 75€ | 10/02/2014 (rowspan 1)
--------------------
Factura5 | 32€ |
Factura6 | 86€ | 12/02/2014 (rowspan 3)
Factura7 | 17€ |

Intento que me agrupe las facturas por fechas, con su correspondiente rowspan alguna idea? No se me ocurre nada
  #2 (permalink)  
Antiguo 10/02/2014, 17:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Ordenacion de datos en tabla a partir de SQL

Pues es algo complejo de explicar (salvo que alguien tenga otra mejor técnica) sobre todo si piensas agrupar por más de un campo.

Básicamente sería meter los datos que obtienes de la base de datos en un arreglo, donde se agruparían por las claves que requieras, en tu caso la clave a agrupar sería fecha.

Luego recorrer el arreglo y verificar si una clave tiene una o más filas dentro, entonces indicar como rowspan el número de filas contenidas.

Siguiendo tu ejemplo, se requiere agrupar primero por fecha para saber cuántas facturas habrá en la misma fecha.

Suponiendo que tienes en una tabla los campos fecha, folio,importe:

Código PHP:
Ver original
  1. while($fila=mysql_fetch_assoc($resultado))
  2.      $arreglo[$fila['fecha']][]=array('folio'=>$fila['folio'],'importe'=>$fila['importe']);//metes los datos dentro de $arreglo agrupando por fecha
  3.  
  4. .....///abres la tabla en html con sus encabezados
  5.  
  6. foreach($arreglo as $fecha =>$filas){
  7.     $cuantos=count($filas);
  8.     $x=0;
  9.     foreach($filas as $fila){
  10.         echo'<tr>';
  11.         echo '<td>'.$fila['folio'].'</td><td>'.$fila['importe'].'</td>';
  12.         if(!$x)//si estamos en la primer fila del grupo
  13.              echo '<td rowspan="'.$cuantos.'">'.$fecha.'</td>';//mostramos la columna fecha
  14.         $x++;
  15.         echo '</tr>';
  16.     }
  17. }
  #3 (permalink)  
Antiguo 10/02/2014, 17:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 45
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ordenacion de datos en tabla a partir de SQL

Ah vale pillo la idea gracias
  #4 (permalink)  
Antiguo 10/02/2014, 20:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ordenacion de datos en tabla a partir de SQL

Una forma un tanto más sencilla de hacerlo, agrupando los datos en la consulta y utilizando un bucle para iterar los datos encontrados.

Suponiendo que los campos de la tabla sean "factura", "cantidad" y "fecha":

Código PHP:
Ver original
  1. <?php
  2. $query = mysqli_query($conexion, "SELECT GROUP_CONCAT(factura SEPARATOR '<br />') AS f, GROUP_CONCAT(cantidad SEPARATOR '<br />') AS c, fecha FROM tabla GROUP BY fecha");
  3.  
  4. if (mysqli_num_rows($query)){
  5. ?>
  6.     <table border = 1>
  7.          <tr>
  8.              <th>Factura</th>
  9.              <th>Cantidad</th>
  10.              <th>Fecha</th>
  11.          </tr>
  12. <?php
  13.      while ($row = mysqli_fetch_array($query)){
  14. ?>
  15.           <tr>
  16.                <td><?=$row["f"]?></td>
  17.                <td><?=$row["c"]?></td>
  18.                <td><?=$row["fecha"]?></td>
  19.           </tr>
  20. <?php
  21.      }
  22.      mysqli_free_result($query);
  23. ?>
  24.      </table>
  25. <?php
  26. }
  27. else
  28.      echo "No se encontraron datos";

Con la función GROUP_CONCAT de MySQL, agrupo los datos de los campos "factura" y "precio" por el valor del campo "fecha" que le corresponda a cada registro, además, coloco un salto de línea como separador entre cada dato agrupado para que al momento de imprimir los datos, se vean así:



Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 10/02/2014 a las 20:27

Etiquetas: sql, table
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.