Foros del Web » Programando para Internet » PHP »

Tablas complejas, no se que hacer.

Estas en el tema de Tablas complejas, no se que hacer. en el foro de PHP en Foros del Web. Anteriormente he puesto un mensaje pero me parece que no me he sabido explicar. necesito en una sola pagina varias tablas con uno de los ...
  #1 (permalink)  
Antiguo 14/03/2006, 06:09
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Tablas complejas, no se que hacer.

Anteriormente he puesto un mensaje pero me parece que no me he sabido explicar.

necesito en una sola pagina varias tablas con uno de los campos como titulo.

Aver si me explico, lo más sencillo es repetir la region y listo genero un tabla en este caso con 4 campos uno pais, otro nombre, otro dirección y otro telefono y me salen todos los registros de la base de datos, eso sin problema, el caso es que en una sola pagina me genere tablas para cada pais

normalmente al hacer una tabla de todos los registros de personas en una base de datos ordenada por país obtendría esto, (de hecho esto si que lo he conseguido hacer):


+---------------+--------------------+-----------+----------+
l.......País...........l.......Nombre........... l...Telefono..l.....sexo....l
+---------------+--------------------+-----------+----------+
l......Alemania.....l.......Pedro R...... .....l...567-3454.l .......H......l
+---------------+--------------------+-----------+----------+
l......Alemania.....l.......Laura...............l. ..567-8688.l.......M......l
+---------------+--------------------+-----------+----------+
l......España ......l.......Jose.................l.890-4398..l........H......l
+---------------+--------------------+-----------+----------+
l......Mexico........l......Carlos...............l .678-4567..l........H......l
+---------------+--------------------+-----------+----------+



y yo quiero que aparezca de la siguiente manera:

Alemania
+-------------+-------------+--------+
l......Pedro R....l...567-3454....l......H....l
+-------------+-------------+--------+
l......Laura.......l...567-8688....l......M....l
+-------------+-------------+--------+

España
+-------------+-------------+--------+
l.....Jose.........l....890-4398...l.....H......l
+-------------+-------------+--------+

México
+-------------+-------------+--------+
l......Carlos......l..678-4567.....l.....H.....l
+-------------+-------------+--------+


Este es el problema que necesito que en lugar de aparecer el país como un campo mas en la tabla me aparezca como titulo de esa tabla.
  #2 (permalink)  
Antiguo 14/03/2006, 06:32
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 13 años
Puntos: 1
Buenos días. La forma mas sencilla de hacerlo sería que dentro de la consulta de los paises hagas una nueva consulta de los usuarios dentro del mismo while de paises haces un select de usuarios y filtras por pais esa seria tu solucion podrías mandar la estructura de tu tabla para hacer una opinión mejor
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 14/03/2006, 07:36
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
este es el php que genera la tabla y que me funciona

asi lo he escrito y me funciona generando una tabla como la primera de las dos que he puesto en mi pregunta, pero que no consigue lo que yo quiero.

php do { ?>
<tr>
<td height="38"><div align="center"><span class="Estilo19"><?php echo $row_Recordset1['pais']; ?></span></div></td>
<td><div align="left"><span class="Estilo8"> &nbsp;<span class="Estilo3"> <span class="Estilo4"><strong><?php echo $row_Recordset1['nombre']; ?></strong></span></span></span></div></td>
<td><div align="center" class="Estilo19"><?php echo $row_Recordset1['telefono']; ?></div></td>
<td><div align="center" class="Estilo19"><?php echo $row_Recordset1['sexo']; ?></div></td>
</tr>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  #4 (permalink)  
Antiguo 14/03/2006, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para lo que pretendes hacer tienes que:

1) Ordenar los resultados de tu consulta por el campo que los agrupa. (para que la técnica que describo funcione).

2) Usar una variable que acomule el valor de tu campo que los agrupa y si este cambia, ahí generes otra impresión de tu dato.

Sería algo tipo:

Código PHP:
<?
// etc funciones de conexión a tu BBDD .. etc...

$sql="SELECT * FROM tabla ORDER BY pais ASC"

// etc ejecución consulta SQL ...

?>
<table ....>
<?
while ($row=mysql_fetch_array($resultado)){
  if (
$pais != $row['pais']){
      echo 
$row['pais']; // define una fila aquí ... de tu tabla con su HTML correspondiente.
  

     
// Tu estructura de tabla (sólo filas) donde la compones con los datos de esos registros ...
     
echo $row['nombre']; // etc...

  // sobre-escribimos la variable con el pais en curso .. este es el "truco" de todo esta técnica (junto con el ordenamiento por ese campo de la consulta SQL).
  
$pais=$row['pais'];
}
?>
</table>
Un saludo,

Última edición por Cluster; 15/03/2006 a las 15:07
  #5 (permalink)  
Antiguo 14/03/2006, 09:19
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
no me funciona

Primero que nada gracias por dedicar tiempo a mi consulta, en segundo lugar, he puesto el codico tal y como me dices mas arriba, y al principio me daba error en mysql_fetch_array pero cambie resultado por $pais y ahora no me da error , simplemente se queda la pagina en blanco.

que podría ser?
  #6 (permalink)  
Antiguo 14/03/2006, 09:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El código que te presenté no es para "cortar/pegar y ejecutar" .. es un psudo código para explicar la técnica que debes emplear ..

En mi ejemplo $resultado se refiere a:
$resultado=mysql_query($sql) or die (mysql_error());

En fin .. como veras no está "completo" pues "supongo" que lo que te hacía falta es saber la técnica que describo (con ese tipo de ordenamiento de los datos en SQL y la variable + ese IF() que se usa de esa forma ...).

Por ende no se trata de cambiar ese "$resultado" por "$pais" .. sino de usar el mismo código que tu usas para obtener esos resultados de la forma que ya sabes hacerlo y añadir la "técnica" del "if()" y esa variable como te propongo.

Te recomiendo que intentes -entender- la técnica que te describo (y sino, pregunta .. para eso estamos) pero no esperes un código "a la carta" en la mayoría de casos. De todas formas .. si tienes problemas -concretos-, mejor -siempre- indica el código completo que estás usando .. pues sino estaremos aquí muchos mensajes haciendo suposiciones e indicando que mires aquí o allá cuando realmente no sabemos si lo que se te indica lo estás aplicacando correctamente (como es el caso).

Un saludo,
  #7 (permalink)  
Antiguo 15/03/2006, 10:50
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Gracias, te escribo el codigo con el que consigo hacer la primer tabla.

Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?>
<?php
mysql_select_db
($database_conn_escuela$conn_escuela);
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC";
$lista_alumnos mysql_query($query_lista_alumnos$conn_goya) or die(mysql_error());
$row_lista_alumnos mysql_fetch_assoc($lista_alumnos);
$totalRows_lista_alumnos mysql_num_rows($lista_alumnos);
?>
<div align="center">
  <table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <?php do { ?>
    <tr>
      <td><?php echo $row_lista_alumnos['Pais']; ?></td>
      <td><?php echo $row_lista_alumnos['Nombre']; ?></td>
      <td><?php echo $row_lista_alumnos['Telefono']; ?></td>
      <td><?php echo $row_lista_alumnos['Sexo']; ?></td>
    </tr>
    <?php } while ($row_lista_alumnos mysql_fetch_assoc($lista_alumnos)); ?>
  </table>
</div>
<?php
mysql_free_result
($lista_alumnos);
?>
  #8 (permalink)  
Antiguo 15/03/2006, 11:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, y ahora como intentastes integrar la propuesta que te hice?

Intentalo ..

Un saludo,
  #9 (permalink)  
Antiguo 15/03/2006, 11:39
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
esto es lo que intente pero me da error a la altura de while.

Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?>
<?php
mysql_select_db
($database_conn_escuela$conn_escuela);
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC";
$lista_alumnos mysql_query($query_lista_alumnos$conn_goya) or die(mysql_error());
$row_lista_alumnos mysql_fetch_assoc($lista_alumnos);
$totalRows_lista_alumnos mysql_num_rows($lista_alumnos);
?>
<div align="center">
  <table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <?php do { ?>
    <tr>
      <td><?php echo $row_lista_alumnos['Pais']; ?></td>
      <td><?php echo $row_lista_alumnos['Nombre']; ?></td>
      <td><?php echo $row_lista_alumnos['Telefono']; ?></td>
      <td><?php echo $row_lista_alumnos['Sexo']; ?></td>
    </tr>
    <?php } while ($row_lista_alumnos mysql_fetch_array($lista_alumnos)){ 
  
if (
$pais != $row_lista_alumnos['Pais']){ 
      
echo 
$row_lista_alumnos['Pais']; 
  } else { 
echo 
$row_lista_alumnos['Nombre']; 
  } 
$pais=$row_lista_alumnos['Pais']; 

?> 
  </table>
</div>
<?php
mysql_free_result
($lista_alumnos);
?>
  #10 (permalink)  
Antiguo 15/03/2006, 13:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Pues nada he tratado de hacerlo de muchas formas y no me sale

tu lo has aplicado alguna vez con exito? gracias.
  #11 (permalink)  
Antiguo 15/03/2006, 14:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Importtex
tu lo has aplicado alguna vez con exito? gracias.
Si.

Como ya te dije por privado, prueba el ejemplo que te dí que es la "esencia" del tema. Comprueba que la técnica funciona y de ahí veras más claro como añadir tu "HTML" por médio para darle forma en una tabla HTML.

Por cierto .. esto es cosa de gustos . .pero el do{... } while() .. a veces lia más que ayuda a ver la lógica del proceso .. Es sólo un comentario. Me resulta más fácil "leer" de arriba abajo que no al reves el código .. (ahora .. es cierto que al final se te puede perder el "cierre" de un bucle).

Un saludo,
  #12 (permalink)  
Antiguo 15/03/2006, 15:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
OJO!.

Me dí cuenta de un pequeño error que ocasionaba una perdida del primer resultado del "grupo" en cuestión.

En mi "if()" hacía un "else" que no corresponde.

En lugar de:

Cita:
<?
if ($pais != $row['pais']){
echo $row['pais']; // define una fila aquí ... de tu tabla con su HTML correspondiente.
} else {
// Tu estructura de tabla (sólo filas) donde la compones con los datos de esos registros ...
echo $row['nombre']; // etc...
}
Sería:
Cita:
<?
if ($pais != $row['pais']){
echo $row['pais']; // define una fila aquí ... de tu tabla con su HTML correspondiente.
}
// Tu estructura de tabla (sólo filas) donde la compones con los datos de esos registros ...
echo $row['nombre']; // etc...
Un saludo,
  #13 (permalink)  
Antiguo 15/03/2006, 15:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Importtex
Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?>
<?php
mysql_select_db
($database_conn_escuela$conn_escuela);
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC";
$lista_alumnos mysql_query($query_lista_alumnos$conn_goya) or die(mysql_error());
$row_lista_alumnos mysql_fetch_assoc($lista_alumnos);
$totalRows_lista_alumnos mysql_num_rows($lista_alumnos);
?>
<div align="center">
  <table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <?php do { ?>
    <tr>
      <td><?php echo $row_lista_alumnos['Pais']; ?></td>
      <td><?php echo $row_lista_alumnos['Nombre']; ?></td>
      <td><?php echo $row_lista_alumnos['Telefono']; ?></td>
      <td><?php echo $row_lista_alumnos['Sexo']; ?></td>
    </tr>
    <?php } while ($row_lista_alumnos mysql_fetch_array($lista_alumnos)){ 
  
if (
$pais != $row_lista_alumnos['Pais']){ 
      
echo 
$row_lista_alumnos['Pais']; 
  } else { 
echo 
$row_lista_alumnos['Nombre']; 
  } 
$pais=$row_lista_alumnos['Pais']; 

?> 
  </table>
</div>
<?php
mysql_free_result
($lista_alumnos);
?>

$row_lista_alumnos = mysql_fetch_assoc($lista_alumnos);
$totalRows_lista_alumnos = mysql_num_rows($lista_alumnos);

En principio eso sobra .. El uso de "_fech_" ya está moviendo el puntero de resultados una posición hacia adelante, sumado a mi error .. con pocos resultados por "grupo" no obtendrías nada ...

Y lo dicho .. quita tu "HTML" que compone la tabla y prueba que el "algorítmo" funciona .. (El HTML que compones no es correcto .. tienes que definir celdas o filas según corresponda..).


Un saludo,
  #14 (permalink)  
Antiguo 15/03/2006, 15:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Sonrisa Gracias

Muchisimas gracias ahoramismo lo pruebo y te cuento
  #15 (permalink)  
Antiguo 15/03/2006, 15:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
he dejado el algoritmo puro.

He dejado el siguiente codigo php sin html sin el else y sin el _fetch_ ni el $totalrows
y deberia de ser este el algoritmo no?

Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?> 
<?php 
mysql_select_db
($database_conn_escuela$conn_escuela); 
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC"
$lista_alumnos mysql_query($query_lista_alumnos$conn_escuela) or die(mysql_error()); 
?> 
  
<?php } while ($row_lista_alumnos mysql_fetch_array($lista_alumnos)){  
   
if (
$pais != $row_lista_alumnos['Pais']){  
       
echo 
$row_lista_alumnos['Pais'];  
  } 
echo 
$row_lista_alumnos['Nombre'];  
   
$pais=$row_lista_alumnos['Pais'];  
}  
?>  

<?php 
mysql_free_result
($lista_alumnos); 
?>



pero nada me dice lo siguiente:

Parse error: parse error, unexpected '}' in /home/virtual/site43/fst/var/www/html/goya/admin/prueba2.php on line 8


y en esa linea esta :
Código PHP:
<?php } while ($row_lista_alumnos mysql_fetch_array($lista_alumnos)){

Última edición por Importtex; 15/03/2006 a las 16:13 Razón: error de dedo en lugar de puro puse pu....sorry
  #16 (permalink)  
Antiguo 15/03/2006, 16:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Mil Gracias Cluster lo he conseguido

Gracias por tu tiempo por fin lo he conseguido, ahora ya solo programo el html y listo, pongo aqui el algoritmo para que le pueda servir a alguien más.

Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?> 
<?php 
mysql_select_db
($database_conn_escuela$conn_escuela); 
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC"
$lista_alumnos mysql_query($query_lista_alumnos$conn_escuela) or die(mysql_error()); 
?> 
<?  
while ($row_lista_alumnos=mysql_fetch_array($lista_alumnos)){  
  if (
$pais != $row_lista_alumnos['Pais']){  
    echo 
$row_lista_alumnos['Pais']; // define una fila aquí ... de tu tabla con su HTML correspondiente.  
  
}   
     
// Tu estructura de tabla (sólo filas) donde la compones con los datos de esos registros ...  
     
echo $row_lista_alumnos['Nombre']; // etc...  
  
  // sobre-escribimos la variable con el pais en curso .. este es el "truco" de todo esta técnica (junto con el ordenamiento por ese campo de la consulta SQL).  
  
$pais=$row_lista_alumnos['Pais'];  
}  
?>
  #17 (permalink)  
Antiguo 16/03/2006, 02:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Terminar el script

He conseguido al final por medio de html dar forma a la tabla
ahora parece algo asi


pais

dato1a dato2a dato3a
dato1b dato2b dato3b

pais2

dato1a dato2a dato3a
dato1b dato2b dato3b

pais 3

dato1a dato2a dato3a

y asi suscesivamente.


el codigo es

Código PHP:
<?php require_once('../Connections/conn_escuela.php'); ?> 
<?php 
mysql_select_db
($database_conn_escuela$conn_escuela); 
$query_lista_alumnos "SELECT * FROM alumnos ORDER BY Pais ASC"
$lista_alumnos mysql_query($query_lista_alumnos$conn_escuela) or die(mysql_error()); 
?> 
<div align="center">
<?  
while ($row_lista_alumnos=mysql_fetch_array($lista_alumnos)){ 
  if  (
$pais != $row_lista_alumnos['Pais']){  
     echo  
$row_lista_alumnos['Pais'];// define una fila aquí ... de tu tabla con su HTML correspondiente.  
  
}  ?><table border="1" width="600">
     
     <td width="200"><? echo $row_lista_alumnos['Nombre'];?></td>
     <td width="200"><? echo $row_lista_alumnos['Telefono'];?></td>
     <td width="200"><? echo $row_lista_alumnos['Sexo'];?></td></table>
   <? $pais=$row_lista_alumnos['Pais'];

?> 
</div>

lo unico que por cada alumno en este caso genera una tabla, en lugar de generar una tabla por cada x numero de alumnos de un mismo pais, si quitamos el table border practicamente no se nota, pero ese no es el cao me gustaría ver si alñguien colabora para perfeccionar este script, que creo que puede ser muy util para todos.

Maestro Cluster si puedes ayudaaaaa plissss.
  #18 (permalink)  
Antiguo 18/03/2006, 17:47
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 13 años, 1 mes
Puntos: 0
Incluyo imagen para que se vea lo que sucede si utilizo elo codigo de arriba

Que puedo hacer para que los registros de cada pais me salgan dentro de una sola tabla por pais y no una tabla por alumno?

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 23:57.