Foros del Web » Programando para Internet » PHP »

Problema con tabla

Estas en el tema de Problema con tabla en el foro de PHP en Foros del Web. Hola muchachos tengo un problema, tengo una consulta que me llena una tabla de datos con un border='1', me trae los datos de manera ordenada, ...
  #1 (permalink)  
Antiguo 23/11/2010, 09:59
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Problema con tabla

Hola muchachos tengo un problema, tengo una consulta que me llena una tabla de datos con un border='1', me trae los datos de manera ordenada, ver imagen, tabla lado izquierdo el problema es que necesito crear la tabla como sale en la figura pero en el lado derecho, como puedo hacer dicha tabla
digo que debo indicarle al while por ejemplo no se me ocurre como


mi codigo es :

Código PHP:
Ver original
  1. <?php
  2. $sql = mysql_query("SELECT * FROM tablauL WHERE nombres = '$_POST[nombres]' GROUP BY nombres");
  3. while ($datos = mysql_fetch_array($sql))
  4. {
  5. ?>
  6. <table align="center" cellpadding="0" cellspacing="0" border="0"  style="width:950px;padding:0;margin:0;">
  7. <?php
  8. $sql2 = mysql_query("SELECT * FROM tablauL WHERE categorias = '$datos[categorias]' GROUP BY categorias");
  9. while ($cat2 = mysql_fetch_array($sql2))
  10. {
  11. $sql3 = mysql_query("SELECT * FROM tablauL WHERE glosa = '$cat2[tipo]' AND nombres = '$datos[nombres]'  GROUP BY tipo");
  12. while ($item = mysql_fetch_array($sql3))
  13. {
  14. $sql4 = mysql_query("SELECT SUM(monto) AS monto FROM tablauL WHERE categorias = '$cat2[categorias]' AND nombres = '$datos[nombres]' AND tipo = '$item[tipo]'");
  15. while ($mm = mysql_fetch_array($sql4))
  16. {
  17. echo "<tr>";
  18. $monto_final = "$mm[monto]";
  19.  
  20. echo "<td width=\"275\" height=\"30\">$datos[nombres]</td>";
  21. echo "<td width=\"246\">$cat2[categorias]</td>";
  22. echo "<td width=\"305\">$item[tipo]</td>";
  23. echo "<td width=\"114\">$mm[monto]</td>";
  24. $monto_final2 = ($monto_final2 + $monto_final);
  25. echo "</tr>";
  26. }
  27. }
  28. }
  29. ?>
  30. </table>
  31. <?php
  32. }
  33. ?>

La consulta esta bien me sale como en tabla izquierda pero no hay caso que me salga la tabla derecha.


__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 23/11/2010, 10:01
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con tabla

debes de añadir rowspan="n" al primer td, pero antes tendrías que calcular las coincidencias por columnas
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 23/11/2010, 10:02
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con tabla

he hay el problema como hago lo de las coincidencias :/
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 23/11/2010, 10:03
 
Fecha de Ingreso: octubre-2010
Ubicación: Alcorcón (Madrid)
Mensajes: 39
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema con tabla

Lo suyo es tener un contador para que lleves la cuenta de cuantas filas por usuario hay, una vez tienes eso, tan facil como añadirle.

Código PHP:
Ver original
  1. <td rowspan="$contador">

Espero te sirva
  #5 (permalink)  
Antiguo 23/11/2010, 10:10
 
Fecha de Ingreso: octubre-2010
Ubicación: Alcorcón (Madrid)
Mensajes: 39
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema con tabla

Cita:
Iniciado por kaninox Ver Mensaje
he hay el problema como hago lo de las coincidencias :/

Pues tendrias que hacer una consulta que coja el campo nombre y una vez tienes ese campo otra consulta justo despues que con ese nombre cuantas filas hay..

Código PHP:
Ver original
  1. $consulta=mysql_query("SELECT nombre FROM nombretabla",$link);
  2. while($fila= mysql_fetch_row($consulta){
  3.     $nombreUsuario=$fila[0];
  4.     $sql="SELECT COUNT(nombre) FROM nombretabla WHERE Nombre=$nombreUsuario";
  5.     $consulta2=mysql_query($sql);
  6.     $contador=mysql_result($consulta2,0);
  7.  
  8. }
  #6 (permalink)  
Antiguo 23/11/2010, 10:14
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Problema con tabla

Saludos

answare No abría necesidad de realizar otra consulta

Código PHP:
Ver original
  1. //Query anteriores..........
  2. //Obtenemos valor nombre
  3. $nombres=$datos[nombres];
  4. //Inicializamos variable
  5.  $rowspanNombre=0;
  6. $sql4 = mysql_query("SELECT SUM(monto) AS monto FROM tablauL WHERE categorias = '$cat2[categorias]' AND nombres = '$datos[nombres]' AND tipo = '$item[tipo]'");
  7. while ($mm = mysql_fetch_array($sql4))
  8. {
  9. //comparamos con el que trae la base de datos
  10.  if($nombres==$datos[nombres];){
  11.  $rowspanNombre++;
  12.  }
  13. echo "<td width=\"275\" height=\"30\" rowpan=\"$rowspanNombre\" >$datos[nombres]</td>";

Algo de este estilo
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #7 (permalink)  
Antiguo 23/11/2010, 10:19
 
Fecha de Ingreso: octubre-2010
Ubicación: Alcorcón (Madrid)
Mensajes: 39
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema con tabla

Cierto viendolo asi tambien se podria, veo que me gusta complicarme!
  #8 (permalink)  
Antiguo 23/11/2010, 12:35
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con tabla

Pues ya lo habia pensado de hecho con los mysql_num_rows() puedo contar lo de los rowspan el tema es que si hay mas de un nombre igual me imprime los demas nombres y me deforma la consulta aunque le diga cuantos rowspan hay, el tema es como decirlo que me imprima solo el primero no se si me explico, ya que lo que me hace con esas consultas es como una cascada de tablas.

me he dado cuenta que por cada vuelta del while pone un rowspan entonces por ello me hace el nido :/
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por kaninox; 23/11/2010 a las 12:53
  #9 (permalink)  
Antiguo 23/11/2010, 13:25
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Problema con tabla

Saludos

No se si de pronto no me di a entender.

Lo intestaste de esta manera

Código PHP:
Ver original
  1. <?php
  2. $sql = mysql_query("SELECT * FROM tablauL WHERE nombres = '$_POST[nombres]' GROUP BY nombres");
  3.  
  4. while ($datos = mysql_fetch_array($sql))
  5. {
  6. ?>
  7. <table align="center" cellpadding="0" cellspacing="0" border="0"  style="width:950px;padding:0;margin:0;">
  8. <?php
  9. //Obtenemos valor nombre
  10. $nombres=$datos[nombres];
  11.  
  12. $sql2 = mysql_query("SELECT * FROM tablauL WHERE categorias = '$datos[categorias]' GROUP BY categorias");
  13. while ($cat2 = mysql_fetch_array($sql2))
  14. {
  15. //Obtenemos la categoria
  16. $categoria=$cat2[categorias];
  17. $sql3 = mysql_query("SELECT * FROM tablauL WHERE glosa = '$cat2[tipo]' AND nombres = '$datos[nombres]'  GROUP BY tipo");
  18. while ($item = mysql_fetch_array($sql3))
  19. {
  20. //Inicializacion de Contadores
  21. $rowspanNombre=0;
  22. $rowspanCategoria=0;
  23. $sql4 = mysql_query("SELECT SUM(monto) AS monto FROM tablauL WHERE categorias = '$cat2[categorias]' AND nombres = '$datos[nombres]' AND tipo = '$item[tipo]'");
  24. while ($mm = mysql_fetch_array($sql4))
  25. {
  26. echo "<tr>";
  27. $monto_final = "$mm[monto]";
  28.  
  29.  
  30. //comparamos con el que trae la base de datos
  31.  if($nombres==$datos[nombres]){
  32.     $rowspanNombre++;
  33.  }
  34.   if($categoria==$datos[nombres]){
  35.     $rowspanCategoria++;
  36.  }
  37. echo "<td width=\"275\" height=\"30\" rowspan=\"$rowspanNombre\">$datos[nombres]</td>";
  38. echo "<td width=\"246\" rowspan=\"$rowspanCategoria\">$cat2[categorias]</td>";
  39. echo "<td width=\"305\">$item[tipo]</td>";
  40. echo "<td width=\"114\">$mm[monto]</td>";
  41. $monto_final2 = ($monto_final2 + $monto_final);
  42. echo "</tr>";
  43. }
  44. }
  45. }
  46. ?>
  47. </table>
  48. <?php
  49. }
  50. ?>

EDITADO: No imprimas de una vez la tabla cada vez que ejecuta un ciclo sino guárdala en una variable y después si imprimes
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 23/11/2010 a las 13:34
  #10 (permalink)  
Antiguo 26/11/2010, 16:18
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con tabla

No hay caso, igual aunque tenga el rowspan, como la siguiente TD igual tiene contenido, me pone rowspan nuevamente...
digo si se dan cuenta.
tengo un bucle

while ...
{
si obtengo rowspan 4 por ejemplo entonces lo que hace el while es.
<td rowspan="4">...
}

ok funciona pero en la primera pasada ya le puso los 4
en la segunda le vuelve a poner 4 y así en la tercera y en la cuarta pasada, entonces mi pregunta es como le hago para que solo me muestre la primera pasada y su rowspan respectivo. se ve fácil pero no lo es :/

en la imgen que puse al principio claramente me muestra los rowspan pero como le hago para quitar por ejemplo los 3 juan del primer TD y que solo me aparesca el primero. y así sucesivamente.

necesito ayuda en esto plis le he dado muchas vueltas y nada :(
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #11 (permalink)  
Antiguo 26/11/2010, 22:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problema con tabla

<saludos>
me anímo a darte una mano si tu me das otra
posteando lo necesario (scripts necesarios, tanto html, como php y sql)
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #12 (permalink)  
Antiguo 27/11/2010, 16:04
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con tabla

Grande maestro te envío los archivos por que por mas vueltas que le doy nada.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #13 (permalink)  
Antiguo 30/11/2010, 19:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Mensaje Respuesta: Problema con tabla

<saludos>

jajaja, gracias por el titulo ad honorem

respecto a lo tuyo, bueno, pues se me ocurre que guardes en un array todo
antes de dibujar la tabla, esto para tener los rowspan para
aplicar y eso

te dejo el ej (como verás, solo agregue la parte del array sobre lo que
vos ya tenías
Código PHP:
$sql mysql_query("SELECT * FROM puntos_ruta WHERE zona = '$zona' AND tipo = '$tipo'  GROUP BY destino");
$sqlrows1 mysql_num_rows($sql);
$i 1;
while (
$datos mysql_fetch_array($sql))
{

$sql2 mysql_query("SELECT * FROM puntos_ruta WHERE destino = '$datos[destino]' AND zona = '$datos[zona]' AND tipo = '$tipo' GROUP BY comportamiento");
$sqlrows2 mysql_num_rows($sql2);

$test[$i][0] = $datos['destino']; 
while (
$comp mysql_fetch_array($sql2))
{
$compt $comp[comportamiento];
$sql3 mysql_query("SELECT * FROM puntos_ruta WHERE comportamiento = '$comp[comportamiento]' AND destino = '$datos[destino]' AND zona = '$datos[zona]' AND tipo = '$tipo' GROUP BY etrabajo");
$sqlrows3 mysql_num_rows($sql3);
$test[$i][1] +=$sqlrows3;
$test[$i][2][] =array($compt,$sqlrows3);
while (
$etrabajo2 mysql_fetch_array($sql3))
{
$etrabajo $etrabajo2[etrabajo];
$sql4 mysql_query("SELECT SUM(total_puntos) AS total FROM puntos_ruta WHERE comportamiento = '$comp[comportamiento]' AND destino = '$datos[destino]' AND etrabajo = '$etrabajo2[etrabajo]' AND zona = '$datos[zona]' AND tipo = '$tipo'");
$sqlrows4 mysql_num_rows($sql4);
while (
$mm mysql_fetch_array($sql4))
{
$test[$i][3][] =array($compt,$etrabajo,$mm['total']);
$total "$mm[total]";

//sql 4
//sql3
//fin sql2
$i++;
//fin sql

print_r($test); 
donde haciendo el print_r se obtiene algo similar a esto

Código:
Array (     
[0] => FDYT     
[1] => 4     
[2] => Array([0] => Array([0] => AV [1] => 3)
              [1] => Array([0] => PP[1] => 1))
[3] => Array([0] => Array([0] => AV[1] => AEO [2] => 9270 )
              [1] => Array([0] => AV[1] => BSS[2] => 5622253)
              [2] => Array([0] => AV[1] => PASV [2] => 18047405)
              [3] => Array([0] => PP[1] => INVP[2] => 12800000)))
y bueno, ya con eso pues sería recorrer el array para
ir dibujando la tabla, espero te sirva la idea

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 30/11/2010 a las 19:48
  #14 (permalink)  
Antiguo 01/12/2010, 07:05
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con tabla

ok muchas gracias vamos a ponerla en practica.
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Etiquetas: tablas
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 12:01.