Comunidad de diseño web y desarrollo en internet online

Iterar 2 veces sobre la misma consulta

Citar            
MensajeEscrito el 31 Ago 2009 03:15 am
Hola a todos este es mi primer post y mi consulta es como (en caso de ser posible) puedo iterar sobre una consulta mysql 2 veces. Para que tengan una idea de lo que quiero hacer aca esta un DER de las tablas de mi base datos sobre las cuales realizo la consulta.

[img]http://l4c.me/fotos/bucleInfinito/resumen-de-tablas-de-consulta[/img]

Supongamos que tengo estos datos cargados:

--- TABLA PELICULAS --- ---TABLA ACTORES --- ---TABLA PELICULAS_X_ACTORES
id: 1 id: 1 Peliculas_id: 1
titulo_original: The Mask actor_nombre: Jim Carrey Actores_id: 1
titulo_traducido: La Máscara
id: 2 Peliculas_id: 1
id:2 actor_nombre: Leonardio Di Caprio Actores_id: 3
titulo_original: Titanic
titulo_traducido: Titanic id: 3 Peliculas_id: 2
actor_nombre: Cameron Diaz Actores_id: 2

id: 4 Peliculas_id: 2
actor_nombre: Kate Winslet Actores_id: 4

Entonces quiero mostrar una tabla que contenga el titulo traducido de la pelicula y los actores que la interpretan y para ello ejecuto la siguiente sentencia SQL:

Código PHP :

$sql = "SELECT p.titulo_traducido AS ttrad, a.actor_nombre AS actor
FROM (Peliculas p, Actores a)
INNER JOIN Peliculas_X_Actores pa
ON a.id= pa.Actores_id AND p.id=pa.Peliculas_id";

$query = mysql_query($sql);
if (mysql_num_rows($query) die;
while($row=mysql_fetch_array($query)) {
   echo "Titulo: ".$row['ttrad'];

   //Aca quiero iterar otra vez sobre la misma consulta para mostrar  
   //solamente una vez el titulo de la pelicula y todos sus actores.
   echo "Reparto: ";
   while($record=mysql_fetch_array($query)) {
        //si los titulos son iguales muestro los actores sino nada
        if ($row['ttrad']===$record['ttrad']) { 
             echo $record['actor'];
        }
   }
}


Bueno espero me entiendan y puedan ayudar. Gracias

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox
Citar            
MensajeEscrito el 31 Ago 2009 11:01 pm
Bueno, logre hacerlo pero haciendo dos consultas distintas, por si alguien tiene el mismo problema, lo hice de esta manera:

Código PHP :

//modifico esta consulta para tomar solo datos de la pelicula
$sql = "SELECT p.id AS codigo,p.titulo_traducido AS ttrad
FROM Peliculas p"; 
 
$query = mysql_query($sql); 
if (mysql_num_rows($query) die; 
while($row=mysql_fetch_array($query)) { 
   echo "Titulo: ".$row['ttrad']; 
 
   //Aca quiero iterar otra vez sobre la misma consulta para mostrar   
   //solamente una vez el titulo de la pelicula y todos sus actores. 
   echo "Reparto: "; 
   //ESTA ES LA PARTE QUE MODIFIQUE Y HAGO LA OTRA CONSULTA
   $sql2 = "SELECT a.actor_nombre AS actor
              FROM Actores a
              INNER JOIN Peliculas_X_Actor pa
              ON a.id=pa.Actores_id AND pa.Peliculas_id='$row['codigo']";
   $query2 = mysql_query($sql) or die(mysql_error());
   while ($reparto=mysql_fetch_array($query2)) {
       echo $reparto['actor'].", ";
   }
}


Espero le sea util a alguien mas que a mi. Ah por cierto si alguien sabe como hacerlo de la manera que yo pretendía al publicar el post original, espero puedan publicarlo como respuesta aca.

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox
Citar            
MensajeEscrito el 01 Sep 2009 02:10 am
eso te hiba a decir ayer pero estaba demasiado cansado :P

mysql no puede dar matrices multidimensionales, por tanto toca hacer 2 consultas

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 02 Sep 2009 02:47 am
Gracias Inyaka, ahora me queda claro, pues yo pense que si se podia obtener matrices multidimensionales.
Saludos

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.