Foros del Web » Programando para Internet » PHP »

Dudas para crear tabla horizontal en PHP y Mysqli

Estas en el tema de Dudas para crear tabla horizontal en PHP y Mysqli en el foro de PHP en Foros del Web. Que tal, actual mente estoy buscando la forma de hacer tablas horizontales.. solo puedo hacerlas verticales. Espero y me puedan ayudar con el problemita jejej.. ...
  #1 (permalink)  
Antiguo 31/01/2015, 11:06
 
Fecha de Ingreso: julio-2012
Mensajes: 30
Antigüedad: 11 años, 9 meses
Puntos: 0
Dudas para crear tabla horizontal en PHP y Mysqli

Que tal, actual mente estoy buscando la forma de hacer tablas horizontales.. solo puedo hacerlas verticales.
Espero y me puedan ayudar con el problemita jejej.. Ya estuve buscando mucho por la web, y los pocos ejemplos que encuentro no me sacan de mi duda.
De antemano muchas gracias por su ayuda..

Anexo codigo de la tabla vertical que la quiero cambiar por horizontal.

Saludos.

Código PHP:
Ver original
  1. <?php
  2.     require('conexion01.php');
  3.  
  4.     $query="SELECT folio, fecha, boleta, placa FROM tb_entradas order by folio desc";// se le agrego el order folio desc para ordenar la tabla de mayor a menor
  5.  
  6.  
  7.     $resultado=$mysqli->query($query);
  8.  
  9.    
  10.  
  11. ?>
  12. <html>
  13.     <head>
  14.         <title>Boletas "A"</title>
  15.     </head>
  16.     <body>
  17.  
  18.  
  19.  
  20.             <h1>Consecutivo Boletas "A"</h1>
  21.        
  22.  
  23.  
  24.        
  25.        
  26.  
  27.         <p></p>
  28.  
  29.         <table border=1 width="80%">
  30.             <thead>
  31.                 <tr>
  32.                     <td><b>Folio</b></td>
  33.                     <td><b>Fecha</b></td>
  34.                     <td><b>Boleta</b></td>
  35.                     <td><b>Placa</b></td>
  36.                    
  37.                    
  38.                 </tr>
  39.                 <tbody>
  40.                     <?php while($row=$resultado->fetch_assoc()){ ?>
  41.                         <tr>
  42.                             <td><?php echo $row['folio'];?>
  43.                             </td>
  44.                             <td>
  45.                                 <?php echo $row['fecha']; ?>
  46.                             </td>
  47.  
  48.                             <td>
  49.                                 <?php echo $row['boleta'];?>
  50.                             </td>
  51.                             <td>
  52.                                 <?php echo $row['placa'];?>
  53.                             </td>
  54.                         </tr>
  55.                     <?php } ?>
  56.                 </tbody>
  57.             </table>
  58.         </body>
  59.     </html>
  #2 (permalink)  
Antiguo 31/01/2015, 15:22
Avatar de Macf  
Fecha de Ingreso: agosto-2007
Mensajes: 29
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Si lo que quieres es que mysql guarde los datos en la tabla como una columna y que cada fila corresponda a una columna he de decirte que es antinatural, que no se puede hacer, y que no tiene utilidad practica ninguna.
Ahora bien, si lo que quieres es que al mostrar la tabla (html) la primera columna tenga los campos folio, fecha, boleta y placa y que cada columna sea una entrada nueva tendrás que hacer que mediante php se agregue una columna extra por cada elemento que te devuelva la consulta.
Para hacer la tabla horizontal quizas te ayude esto con el html: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_headers
  #3 (permalink)  
Antiguo 01/02/2015, 11:36
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por Macf Ver Mensaje
Si lo que quieres es que mysql guarde los datos en la tabla como una columna y que cada fila corresponda a una columna he de decirte que es antinatural, que no se puede hacer, y que no tiene utilidad practica ninguna.
¿Y eso de donde lo sacaste? Me gustaría leer alguna razón que justifique lo que dices, porque en principio, lo que dices no es verdad.
Puedo darte rápidamente y si pensar mucho al menos 5 usos potenciales de esta caracteristica.

Este tema ya se ha tratado previamente, en este tema respondí a otro usuario como realizar dicha tarea directamente desde la base de datos.

Te adelanto que la característica que buscas se llama Pivote, particularmente Pivote dinamico, y que puedes encontrar mas informacion buscando en google por las palabras: pivot table - tabla multidimensional - cross-table.

Es un tema interesante.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 15/02/2015, 11:53
Avatar de Macf  
Fecha de Ingreso: agosto-2007
Mensajes: 29
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por NSD Ver Mensaje
¿Y eso de donde lo sacaste? Me gustaría leer alguna razón que justifique lo que dices, porque en principio, lo que dices no es verdad.
Puedo darte rápidamente y si pensar mucho al menos 5 usos potenciales de esta caracteristica.

Este tema ya se ha tratado previamente, [URL="http://www.forosdelweb.com/f18/dibujar-tabla-1106970/#post4629398"]en este tema[/URL] respondí a otro usuario como realizar dicha tarea directamente desde la base de datos.

Te adelanto que la característica que buscas se llama Pivote, particularmente Pivote dinamico, y que puedes encontrar mas informacion buscando en google por las palabras: pivot table - tabla multidimensional - cross-table.

Es un tema interesante.
Ciertamente NSD desconocía por completo el esquema de tablas verticales en mysql, y que tuvieran alguna utilidad mas allá de lo meramente académico.
Es mas, tanto en el tema al que me remites, como en el ejemplo que pones allí yo calificaría la necesidad de utilizar (o emular) esta característica como un fallo de diseño de las tablas, se me ocurren al menos dos diseños de db mucho mejores que el que presentaba orteloco en su post que no requerirían de consultas extremadamente complejas y tediosas para el motor como las que tu propones. Por lo tanto repito que esta característica de rotado de tablas (salvo en casos muy excepcionales y anecdóticos) se debe a un error de diseño, prueba de ello es que el motor de bases de datos me atrevería a decir mas masivamente extendido no lo implementa, es más, lo único que te permite es devolver los datos con los ejes x e y de la tabla cambiados, que si es lo que necesitas desde un principio significa que los datos han sido guardados en la DB de forma errónea.

Última edición por Macf; 15/02/2015 a las 12:04
  #5 (permalink)  
Antiguo 16/02/2015, 12:34
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por Macf Ver Mensaje
Ciertamente NSD desconocía por completo el esquema de tablas verticales en mysql, y que tuvieran alguna utilidad mas allá de lo meramente académico.
Es mas, tanto en el tema al que me remites, como en el ejemplo que pones allí yo calificaría la necesidad de utilizar (o emular) esta característica como un fallo de diseño de las tablas, se me ocurren al menos dos diseños de db mucho mejores que el que presentaba orteloco en su post que no requerirían de consultas extremadamente complejas y tediosas para el motor como las que tu propones. Por lo tanto repito que esta característica de rotado de tablas (salvo en casos muy excepcionales y anecdóticos) se debe a un error de diseño, prueba de ello es que el motor de bases de datos me atrevería a decir mas masivamente extendido no lo implementa, es más, lo único que te permite es devolver los datos con los ejes x e y de la tabla cambiados, que si es lo que necesitas desde un principio significa que los datos han sido guardados en la DB de forma errónea.
Y porque calificarias la necesidad de mostrar tablas rotadas como un fallo de diseño? segun lo que planteas, cada vez que haga falta esta carasteristica, lo que hay detras una falla de diseño y no estoy de acuerdo con que sea asi.

Las aplicaciones de los pivotes son amplios, te sugiero informarte del tema un poco mas.

Mysql es un motor mediocre e incompleto, carece de muchas cosas, si consideramos error de diseño a cada característica que no implementa este motor entonces quedarian muy cosos sistemas (sindo estos los mas triviales) que no sean considerados como incorrectos.

Motores como Oracle o SQLServer implementan esta caracteristica "como prueba de que no es un error de diseño" (notese el sarcasmo ya que lo que implementa o deja de implementar un motor nada tiene que ver con que su uso sea correcto o no), de hecho, Oracle presenta a esto como "una de sus principales caracteristicas"

La necesidad de rotar tablas existio desde el inicio, tanto es asi que HTML soporta la etiqueta "col" en las tablas desde el estándar 4.1, justamente para poder visualizar datos rotados.

Si bien es una característica poco comun, es muy utilizada en el ambiente empresarial, principalmente en la gerencia para la toma de decisiones, a tal punto, que Microsoft ha lanzado PowerPivot como parte de la suite de Office con la finalidad de incorporar esta caracteristica a sus planillas de calculo.

Las deciciones que toma una empresa para lanzar productos, poco tienen que ver con si son correctos o no, pero si estan fuertemente relacionados con una demanda existente del mercado.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 16/02/2015, 14:05
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 3 meses
Puntos: 1
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Disculpen la intromisión jejeje sería interesante que el usuario que abrio este tema explique su intensión (del porque requiere convertir horizontalmente su tabla) para mayor claridad, si me permiten me gustaría dar mi opinion, es cierto es útil poder convertir la presentacion o reporte de información de vertical a horizontal en ciertas ocasiones queda mas claro y mejor, estuve revisando algunos link que ofrecio NSD y efectivamente existen gestores SQL que dan soporte, el tema es que las que pude revisar hablan de tablas dinamicas y temporales (tablas en memoria), mysql permite tablas temporales quizas podría utilizarse como alternativa, ahora lo que no me cierra es la intensión de convertir tablas verticales (supongo que son extensas) a horizontales, segun la estructura de los archivos de por lo menos mysql cada tabla es un archivo y hacerlo crecer horizontalmente mediante alter table presupone crear un nuevo archivo y hacerlo mas ancho y luego leer los registros viejos y copiarlos al nuevo archivo, y me parece excesivo el trabajo y que estaría penalizando el tiempo del procesador, además para hacer esto el archivo debe accederse exclusivamente y no puede ser accedido por los demas terminales. Disculpen si no entendi bien el tema, pero habría que evaluar bien el tema, si son pocos registros no habría mayores problemas ahora si son muchos... y porque cambiar en la base de datos? porque no hacerlo en la presentacion o reporte?

Última edición por orodrf; 16/02/2015 a las 14:20 Razón: se envio sin terminar
  #7 (permalink)  
Antiguo 17/02/2015, 17:07
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por orodrf Ver Mensaje
Disculpen la intromisión jejeje sería interesante que el usuario que abrio este tema explique su intensión (del porque requiere convertir horizontalmente su tabla) para mayor claridad, si me permiten me gustaría dar mi opinion, es cierto es útil poder convertir la presentacion o reporte de información de vertical a horizontal en ciertas ocasiones queda mas claro y mejor, estuve revisando algunos link que ofrecio NSD y efectivamente existen gestores SQL que dan soporte, el tema es que las que pude revisar hablan de tablas dinamicas y temporales (tablas en memoria), mysql permite tablas temporales quizas podría utilizarse como alternativa, ahora lo que no me cierra es la intensión de convertir tablas verticales (supongo que son extensas) a horizontales, segun la estructura de los archivos de por lo menos mysql cada tabla es un archivo y hacerlo crecer horizontalmente mediante alter table presupone crear un nuevo archivo y hacerlo mas ancho y luego leer los registros viejos y copiarlos al nuevo archivo, y me parece excesivo el trabajo y que estaría penalizando el tiempo del procesador, además para hacer esto el archivo debe accederse exclusivamente y no puede ser accedido por los demas terminales. Disculpen si no entendi bien el tema, pero habría que evaluar bien el tema, si son pocos registros no habría mayores problemas ahora si son muchos...
Primero que nada, uno de los primeros conceptos del modelo relacional es que los datos crecen verticalmente, nunca en horizontal, ningun motor de datos relacional soportara nunca ese tipo de estructura.

Los datos reales nunca se rotan, se rota el resultado de la consulta, es decir, lanzas la consulta, vuelve el resultado, se pivota este para rotarlo, y luego se obtiene una nueva tabla con los datos rotados.
Por lo general los resultados a pivotar son ciempre pocos registros (menos de 100), la implementacion de esto es muy compleja, debido a que las columnas finales (tanto nombre como cantidad) son dinamicos, y las condiciones de filtrado (WHERE, HAVING, ETC) deben poder aplicarse tanto a los resultados pivotados como a los previos a la rotacion, por este motivo son pocos motores los que lo soportan.
Cita:
Iniciado por orodrf Ver Mensaje
y porque cambiar en la base de datos? porque no hacerlo en la presentacion o reporte?
Hay muchas formas de hacerlo, depende lo que se quiera lograr, si el destino de los datos es mostrarlo al usuario se pueden usar las etiquetas "col" de HTML en vez de los "tr", pero si esos datos deben ser enviados a otro procedimiento, entonces hay que rotarlos antes, ya sea desde la base de datos o desde php.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 18/02/2015, 06:30
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 3 meses
Puntos: 1
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por NSD Ver Mensaje
Primero que nada, uno de los primeros conceptos del modelo relacional es que los datos crecen verticalmente, nunca en horizontal, ningun motor de datos relacional soportara nunca ese tipo de estructura.

Por lo general los resultados a pivotar son ciempre pocos registros (menos de 100), la implementacion de esto es muy compleja, debido a que las columnas finales (tanto nombre como cantidad) son dinamicos, y las condiciones de filtrado (WHERE, HAVING, ETC) deben poder aplicarse tanto a los resultados pivotados como a los previos a la rotacion, por este motivo son pocos motores los que lo soportan.
Perfecto eso es lo natural agregar registros al final del archivo, se aplica a base de datos relacional, estructurado y orientado a objetos, se puede hacer crecer una tabla horizontal mediante alter table como mensione antes pero con demoras extras que ya explique y no es un uso aconsejado salvo en reformas o reestructuración del sistema.

Ahora en mysql mediante procedimiento almacenado podría facilmente cambiarse resultados de una consulta vertical a una tabla temporal rotando esos resultados o bien desde PHP podria recorrese ese resultado y enviarlo a otra tabla temporal, pero yo optaría por invertirlo en el momento de presentar el resultado, claro dependiendo del caso.

Desconozco ORACLE y SQL SERVER, lo unico que se de estos gestores caros, es que almacenan varias tablas en un archivo y esto penaliza extremadamente cambiar la estructura de las mismas, pero dicen que son buenos.

Ok, entendí mal pense que aconsejabas rotar muchos registros.
  #9 (permalink)  
Antiguo 18/02/2015, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Tanto Oracle como SQL Server, y también Mysql, (especialmente los dos primeros) tienen aplicativos específicos para crear ese tipo de vistas en forma de tabla inversa, y ninguno de ellos lo hace con tablas físicas.
Es un despropósito hacer tablas inversas por ciertas restricciones propias de esos sistemas.
Por lo pronto, este tipo de resumenes corresponden a OLAP, y en general a BI, para lo cual se diseñaron esos recursos, que se alimentan de datos de bases relacionales, sin modificarlas. Generar ese tipo de resultados no requiere modificaciones estructurales a la base. Sólo optimización de consultas y procesos. Que luego, lso resultados se almacenen en tablas, no implica que las tablas de almacenamiento no sigan las mismas reglas ya defindias pra las tablas base.
Por otro lado, toda tabla tiene, en todos los DBMS un límite de columnas posibles, que no existe en el concepto de tablas pivoteadas o inversas. No existe, porque en una tabla inversa podrían, segun el caso, existir desde 0 a N columnas, donde N sería cualquier numero entre 1 e infinito columnas (esto significa que podría haber tantas columnas como registros tenga la tabla). Y eso no hay DBMS que lo soporte.
En el caso de MySQL, hay limites definidos también:
Cita:
There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table and depends on the factors discussed in Section D.10.4, “Limits on Table Column Count and Row Size”.
El tema tiene una explicacion y detalle algo más especifico en http://dev.mysql.com/doc/refman/5.6/...unt-limit.html

Ahora bien, desde el punto de vista de la interacción entre aplicación y BBDD, no es conveniente crear tablas con un numero de columnas excesivamente grande, ya que se vuelve inmanejable en las consultas, y generan habitualmente un consumo de transacciones y datos demasiado elevando, sin justificación. Todo lo que se puede lograr con ese tipo de tablas, se puede obtener mucho más facilmente procesando los datos en la base con tablas de salida normal, y luego pivoteandolas al momento de mostrar los datos. Eso es lo que, en definitiva, hacen las herramientas OLAP, solo que no se ve.
Adicionalmente, en los DBMS ya existen recursos de SQL para anlaizar cubos OLAP por medio de consultas, pero estor procesamientos de todos modos se basan en tablas no pivoteadas, aunque sea eso lo que terminan devolviendo.

Resumiendo: No es conveniente construirlas físicamente. Es mas optimizable crear los procesos de datos y luego mostrar las cosas como se desean.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 21/02/2015, 06:34
Avatar de Macf  
Fecha de Ingreso: agosto-2007
Mensajes: 29
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Dudas para crear tabla horizontal en PHP y Mysqli

Cita:
Iniciado por NSD Ver Mensaje
Y porque calificarias la necesidad de mostrar tablas rotadas como un fallo de diseño? segun lo que planteas, cada vez que haga falta esta carasteristica, lo que hay detras una falla de diseño y no estoy de acuerdo con que sea asi.

Las aplicaciones de los pivotes son amplios, te sugiero informarte del tema un poco mas.

Mysql es un motor mediocre e incompleto, carece de muchas cosas, si consideramos error de diseño a cada característica que no implementa este motor entonces quedarian muy cosos sistemas (sindo estos los mas triviales) que no sean considerados como incorrectos.

Motores como Oracle o SQLServer implementan esta caracteristica "como prueba de que no es un error de diseño" (notese el sarcasmo ya que lo que implementa o deja de implementar un motor nada tiene que ver con que su uso sea correcto o no), de hecho, Oracle presenta a esto como "[URL="http://www.oracle.com/technetwork/es/articles/sql/caracteristicas-database11g-2108415-esa.html"]una de sus principales caracteristicas[/URL]"

La necesidad de rotar tablas existio desde el inicio, tanto es asi que HTML soporta la etiqueta "col" en las tablas desde el estándar 4.1, justamente para poder visualizar datos rotados.

Si bien es una característica poco comun, es muy utilizada en el ambiente empresarial, principalmente en la gerencia para la toma de decisiones, a tal punto, que Microsoft ha lanzado [URL="https://support.office.microsoft.com/es-es/article/Power-Pivot-an%C3%A1lisis-de-datos-eficaz-y-modelado-de-datos-en-Excel-d7b119ed-1b3b-4f23-b634-445ab141b59b?CorrelationId=1e2573fe-0e8a-451d-8ade-ca06f1297ea2&ui=es-ES&rs=es-ES&ad=ES"]PowerPivot[/URL] como parte de la suite de Office con la finalidad de incorporar esta caracteristica a sus planillas de calculo.

Las deciciones que toma una empresa para lanzar productos, poco tienen que ver con si son correctos o no, pero si estan fuertemente relacionados con una demanda existente del mercado.
Después de leer exhaustivamente el link que me has mandado he descubierto que me había obcecado en la idea de que cuando hablabas de tablas verticales te referías a la forma de guardar los datos, y eso es lo que consideraba un claro error de diseño de la aplicación y por ello no se me ocurría ninguna aplicación practica de esta característica.
Pero de lo que tu me estabas hablando, es en realidad la forma en la que el motor de la base de datos te devuelve los resultados, la tabla de la base de datos es exactamente igual en una horizontal que en una vertical solo que al leer los datos te los ordena de otra forma y esto, como bien sale en el artículo que me has mostrado, si es útil en algunos casos. Aunque yo no veo inconveniente en ordenar los datos en la propia aplicación está bien que algunos motores introduzcan esta característica y me gustaría que mysql fuera uno de ellos.

Un saludo y perdona si te he molestado.

Etiquetas: dudas, fecha, horizontal, html, mysqli, select, sql, tabla
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 15:53.