Foros del Web » Programando para Internet » PHP »

no consigo unir dos while.

Estas en el tema de no consigo unir dos while. en el foro de PHP en Foros del Web. Hola tengo una duda, y es que dependiendo de como ordene el código me sale una cosa u otra. quiero meter un while dentro de ...
  #1 (permalink)  
Antiguo 07/03/2007, 09:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
no consigo unir dos while.

Hola tengo una duda, y es que dependiendo de como ordene el código me sale una cosa u otra.

quiero meter un while dentro de otro while, pero parece que no lo hago bien.

si lo hago de esta manera el último campo no me lo imprime.

Código PHP:
<html>

<head> <title>listado de proyectos</title></head>
<body>
<?
//Conexion con la base
mysql_connect("localhost","daniel","daniel");
mysql_select_db("gestion");

//consulta de las 3 tablas que se quieren visualizar.

$sSQL="select * from principal, descriptor, localizacion, tabla_puente_descriptor 
where principal.id_plantilla = tabla_puente_descriptor.id_plantilla  
and descriptor.id_descrip = tabla_puente_descriptor.id_descrip  
and principal.id_localizacion = localizacion.id_localizacion"
;
$result=mysql_query($sSQL);
while (
$row=mysql_fetch_array($result)){
echo 
"<table border=2> <tr><td>";
echo 
$row['id_plantilla'];
echo 
"</td><td><td></td><td></td></tr>";
echo 
"<tr><td>titulo</td><td>";
echo 
$row['titulo'];
echo 
"</td><td>localización:</td><td>";
echo 
$row['hijo'];
echo 
"</td></tr><tr><td>fecha de inicio</td><td>";
echo 
$row['fecha_inicio']; 
echo 
"</td><td>Fecha fin:</td><td>";
echo 
$row['fecha_fin'];
$dato=$row['id_plantilla'];
echo 
"</td></tr><tr><td>Descriptores:</td><td>";
$sSQL2="select principal.id_plantilla, descriptor from principal, descriptor, localizacion, tabla_puente_descriptor 
where principal.id_plantilla = tabla_puente_descriptor.id_plantilla  
and descriptor.id_descrip = tabla_puente_descriptor.id_descrip  
and principal.id_localizacion = localizacion.id_localizacion and principal.id_plantilla like '$dato'"
;
$result2=mysql_query($sSQL2);
while (
$row=mysql_fetch_array($result2))
{echo 
$row['descriptor'].";";}
echo 
"</tr><tr><td>Descripcion:</td><td>";
echo 
$row['descripcion'];
echo 
"</td></tr></table><br><hr>";}
?>

</body>
</html>
me imprime de esta manera:
43
titulo titulo localización: asturias
fecha de inicio 2007-07-06 Fecha fin: 2007-08-06
Descriptores: descriptor_a;
Descripcion:

44
titulo titulo localización: asturias
fecha de inicio 2007-07-06 Fecha fin: 2007-08-06
Descriptores: descriptor_a;descriptor_c;
Descripcion:

44
titulo titulo localización: asturias
fecha de inicio 2007-07-06 Fecha fin: 2007-08-06
Descriptores: descriptor_a;descriptor_c;
Descripcion:

45
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-12 Fecha fin: 2007-02-19
Descriptores: descriptor_a;descriptor_c;
Descripcion:

45
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-12 Fecha fin: 2007-02-19
Descriptores: descriptor_a;descriptor_c;
Descripcion:

si cambio el código a esta forma:
Código PHP:
<html>

<head> <title>listado de proyectos</title></head>
<body>
<?
//Conexion con la base
mysql_connect("localhost","daniel","daniel");
mysql_select_db("gestion");

//consulta de las 3 tablas que se quieren visualizar.

$sSQL="select * from principal, descriptor, localizacion, tabla_puente_descriptor 
where principal.id_plantilla = tabla_puente_descriptor.id_plantilla  
and descriptor.id_descrip = tabla_puente_descriptor.id_descrip  
and principal.id_localizacion = localizacion.id_localizacion"
;
$result=mysql_query($sSQL);
while (
$row=mysql_fetch_array($result)){
echo 
"<table border=2> <tr><td>";
echo 
$row['id_plantilla'];
echo 
"</td><td><td></td><td></td></tr>";
echo 
"<tr><td>titulo</td><td>";
echo 
$row['titulo'];
echo 
"</td><td>localización:</td><td>";
echo 
$row['hijo'];
echo 
"</td></tr><tr><td>fecha de inicio</td><td>";
echo 
$row['fecha_inicio']; 
echo 
"</td><td>Fecha fin:</td><td>";
echo 
$row['fecha_fin'];
echo 
"</tr><tr><td>Descripcion:</td><td>";
echo 
$row['descripcion'];
$dato=$row['id_plantilla'];
echo 
"</td></tr><tr><td>Descriptores:</td><td>";
$sSQL2="select principal.id_plantilla, descriptor from principal, descriptor, localizacion, tabla_puente_descriptor 
where principal.id_plantilla = tabla_puente_descriptor.id_plantilla  
and descriptor.id_descrip = tabla_puente_descriptor.id_descrip  
and principal.id_localizacion = localizacion.id_localizacion and principal.id_plantilla like '$dato'"
;
$result2=mysql_query($sSQL2);
while (
$row=mysql_fetch_array($result2))
{echo 
$row['descriptor'].";";}


echo 
"</td></tr></table><br><hr>";}
?>

</body>
</html>
me imprime el código de esta otra manera.
44
titulo titulo localización: asturias
fecha de inicio 2007-07-06 Fecha fin: 2007-08-06
Descripcion: lalalalaalalalla
Descriptores: descriptor_a;descriptor_c;

45
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-12 Fecha fin: 2007-02-19
Descripcion: trialara
Descriptores: descriptor_a;descriptor_c;

45
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-12 Fecha fin: 2007-02-19
Descripcion: trialara
Descriptores: descriptor_a;descriptor_c;

46
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-04 Fecha fin: 2007-02-12
Descripcion: define el proyecto
Descriptores: descriptor_a;descriptor_b;descriptor_c;

46
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-04 Fecha fin: 2007-02-12
Descripcion: define el proyecto
Descriptores: descriptor_a;descriptor_b;descriptor_c;

46
titulo titulo localización: Madrid cam
fecha de inicio 2007-02-04 Fecha fin: 2007-02-12
Descripcion: define el proyecto
Descriptores: descriptor_a;descriptor_b;descriptor_c;


-----------------------------------------------------------
me repite todo.

alguien me puede ayudar por favor.

un saludo

oskar calvo
  #2 (permalink)  
Antiguo 07/03/2007, 09:39
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: no consigo unir dos while.

Pues tu código esta bien,creo más bien que el problema esta en las consultas. "Diseña" bien tus consultas .
Si siguieras teniendo problema con las consultas te sugiero que preguntes en el foro de Base de datos.

Saludillos.
  #3 (permalink)  
Antiguo 07/03/2007, 09:57
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: no consigo unir dos while.

Gracias Mauled, el error no esta en las consultas de hecho ya las he depurado, el problema que tengo es que while es el tipo de bucle más sencillo que hay en php.

necesito convertir el segundo while en un foreach. Pero no consigo saber como hacerlo.
  #4 (permalink)  
Antiguo 07/03/2007, 10:27
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: no consigo unir dos while.

ya lo tengo hecho, el código final sería el siguiente.

Código PHP:
<html>

<head> <title>listado de proyectos</title></head>
<body>
<?
//Conexion con la base
mysql_connect("localhost","daniel","daniel");
mysql_select_db("gestion");

//consulta de las 3 tablas que se quieren visualizar.

$sSQL="SELECT principal.id_plantilla, principal.titulo, localizacion.hijo, principal.fecha_inicio, principal.fecha_fin, principal.descripcion FROM principal, localizacion WHERE principal.id_localizacion = localizacion.id_localizacion order by principal.id_plantilla";
$result=mysql_query($sSQL);
while (
$row=mysql_fetch_array($result)){
echo 
"<table border=2> <tr><td>";
echo 
$row['id_plantilla'];
echo 
"</td><td><td></td><td></td></tr>";
echo 
"<tr><td>titulo</td><td>";
echo 
$row['titulo'];
echo 
"</td><td>localización:</td><td>";
echo 
$row['hijo'];
echo 
"</td></tr><tr><td>fecha de inicio</td><td>";
echo 
$row['fecha_inicio']; 
echo 
"</td><td>Fecha fin:</td><td>";
echo 
$row['fecha_fin'];
$dato=$row['id_plantilla'];
echo 
"</td></tr><tr><td>Descriptores:</td><td>";
$sSQL2="SELECT descriptor.descriptor FROM descriptor, tabla_puente_descriptor, principal WHERE principal.id_plantilla = tabla_puente_descriptor.id_plantilla AND descriptor.id_descrip = tabla_puente_descriptor.id_descrip  and principal.id_plantilla like '$dato' order by principal.id_plantilla";
$result2=mysql_query($sSQL2);
for (
$j=0$rec=mysql_fetch_array($result2); $j++){
     
printf($rec["descriptor"]." ,");}


echo 
"</tr><tr><td>Descripcion:</td><td>";
echo 
$row['descripcion'];


echo 
" | aquí debería estar el descriptor</td></tr></table><br><hr>";

}
?>

</body>
</html>

la solucción la he encontrado en el manual de php ne la red, la verdad es que cada día presento nuevas perlas en ese manual.

Un saludo y gracias, ahora me toca la sentencia if para quitar la coma al último resultado.

oskar calvo
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 00:58.