Foros del Web » Programando para Internet » PHP »

Un "while" dentro de otro, y necesito que cambien las variables

Estas en el tema de Un "while" dentro de otro, y necesito que cambien las variables en el foro de PHP en Foros del Web. Hola, tengo un grave problema con PHP y les paso a explicar cual es, tomen asiento jejep... Básicamente mi idea es crear una tabla de ...
  #1 (permalink)  
Antiguo 18/09/2011, 01:26
 
Fecha de Ingreso: mayo-2009
Ubicación: Los Cerrillos
Mensajes: 5
Antigüedad: 14 años, 11 meses
Puntos: 0
Pregunta Un "while" dentro de otro, y necesito que cambien las variables

Hola, tengo un grave problema con PHP y les paso a explicar cual es, tomen asiento jejep...

Básicamente mi idea es crear una tabla de MySQL por cada artista musical que tengo registrado en otra tabla MySQL, pero ese no es el problema, eso ya esta hecho, el problema aparece cuando quiero que se vean en la web les muestro con un ejemplo que es lo que quiero hacer:

Originariamente yo tenia:

Código PHP:
Ver original
  1. while($rows = mysql_fetch_array($artistas))
  2.                 {
  3.                   echo "<tr>";
  4.                   echo "<td align='center'><img src='http://" . $rows['imagen'] . "'></td>";
  5.                   echo "</tr><tr>";
  6.                   echo "<td align='center'>- " . $rows['artista'] . " -</td>";
  7.                   echo "</tr>";
  8.                   echo "<tr>";
  9.                   echo "<td>";
  10.                   echo "</td>";
  11.                   echo "</tr>";
  12.                   echo "<tr><td><img src='http://locuraurbana.com/images/divisor1.png'></td></tr>";
  13.                 }

Y entre la linea 9 y 10 quiero poner:
Código PHP:
Ver original
  1. while($row = mysql_fetch_array($cancion))
  2. {
  3. echo "".$row['cancion']. "<br>" ;
  4. }
habiendo antes definido:
Código PHP:
Ver original
  1. $artistas = mysql_query("SELECT * FROM artistas order by codigo desc");
  2. $cancion = mysql_query("SELECT * FROM mato");
¿Ven el problema?, esta en que siempre me mostrara para todos los "artistas" la mismas "cancion".

Yo creo que el problema se solucionaria si pudiera poner la variable " $rows['artista'] " en:
Código PHP:
Ver original
  1. while($row = mysql_fetch_array(mysql_query("SELECT * FROM $rows['artista']")))
  2.                                     {
  3.                                         echo "".$row['cancion']. "<br>" ;
  4.                                     }

Que a su vez quedaria asi:

Código PHP:
Ver original
  1. $artistas = mysql_query("SELECT * FROM artistas order by codigo desc");
  2. while($rows = mysql_fetch_array($artistas))
  3.                 {
  4.                   echo "<tr>";
  5.                   echo "<td align='center'><img src='http://" . $rows['imagen'] . "'></td>";
  6.                   echo "</tr><tr>";
  7.                   echo "<td align='center'>- " . $rows['artista'] . " -</td>";
  8.                   echo "</tr>";
  9.                   echo "<tr>";
  10.                   echo "<td>";
  11.                                    
  12.                                     while($row = mysql_fetch_array(mysql_query("SELECT * FROM $rows['artista']")))
  13.                                     {
  14.                                         echo "".$row['cancion']. "<br>" ;
  15.                                     }                                  
  16.                  
  17.                   echo "</td>";
  18.                   echo "</tr>";
  19.                   echo "<tr><td><img src='http://locuraurbana.com/images/divisor1.png'></td></tr>";
  20.                 }

La verdad no conozco a nadie que sepa del tema, por eso recuro a internet, soy muy novato en esto de la programacion, espero que puedan ayudarme..
  #2 (permalink)  
Antiguo 18/09/2011, 03:21
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Un "while" dentro de otro, y necesito que cambien las variables

Saludos. Cuando hay que anidar bucles se debe ser cuidadoso con las variables. Creo que para identificar mejor el problema deberías establecer buenas diferencias entre los nombres de variables, evitando similitudes como $rows y $row, pues puedieras confundirte al escribirlas y eso es un verdadero dolor de cabeza. Te dejo un ejemplo simplificado de tu código que debería funcionear:

Código PHP:
$SQL="SELECT * FROM Artistas";
$artistas=mysql_query($SQL);
while(
$row_artista mysql_fetch_array($artistas)){
      echo 
"<b>$row_artista['CampoNombre']</b>";
      
$SQL="SELECT * FROM Canciones WHERE
      Artista='"
.$row_artista['CampoNombre']."'";
      
$canciones=mysql_query($SQL);
      while(
$row_cancion mysql_fetch_array($canciones)){
           echo 
"$row_cancion['CampoTitulo']";
      }

Espero que te funcione.
  #3 (permalink)  
Antiguo 18/09/2011, 08:00
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 17 años, 11 meses
Puntos: 14
Respuesta: Un "while" dentro de otro, y necesito que cambien las variables

¿Cómo es la base de datos? ¿Tienes una tabla para artistas y luego una tabla con el nombre de cada artista para poner sus canciones?

Lo digo por esto
Código PHP:
Ver original
  1. SELECT * FROM $rows['artista']

Te lo comento porque si es así, es posible que la base de datos no esté del todo bien diseñada y todos estos problemas que estás teniendo ahora se pudieran solucionar de una forma más sencilla y lógica.
__________________
No hay cuerda desafinada sino músico progresivo
  #4 (permalink)  
Antiguo 18/09/2011, 12:15
 
Fecha de Ingreso: mayo-2009
Ubicación: Los Cerrillos
Mensajes: 5
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Un "while" dentro de otro, y necesito que cambien las variables

Claro, Smolky, cuando creas en la tabla artistas un artista, automaticamente se crea una tabla con el nombre del artista, por eso:
Código PHP:
Ver original
  1. SELECT * FROM $rows['artista']
Pero así nada mas no me permite poner el nombre de la tabla, ¿me explico?

jorgelpadronb, el codigo que tu me proporcionas tiene errores ya que no puedo poner las variables $row_cancion['CampoTitulo'], por ejemplo, no puede estar entre comillas, cuando se las quito, aun sigue dando error, creo que es un error parecido al que yo tenia anteriormente..

Aun no encuentro como solucionarlo.
Gracias por sus contribuciones.
  #5 (permalink)  
Antiguo 18/09/2011, 13:14
Avatar de Smolky  
Fecha de Ingreso: mayo-2006
Ubicación: Cartagena
Mensajes: 177
Antigüedad: 17 años, 11 meses
Puntos: 14
Respuesta: Un "while" dentro de otro, y necesito que cambien las variables

Vale. Sobre el diseño de la base de datos, por si todavía estás a tiempo de realizar algunas consideraciones yo te recomendaría hacerlo de la siguiente manera:

Una tabla para artistas y otro para canciones.
- La tabla de artistas tiene una clave primaria numérica y el nombre del artista.
- La tabla de canciones contiene el identificador de la canción, el nombre de la canción, y el identificador del artista (siempre y cuando quieras mantener la relación de 1 a muchos, es decir, un artista compone 0 o más canciones, y una canción es compuesta sólo por un artista)

Las ventajas de este método son:
- Si cambia el nombre del artista no hay que cambiar la tabla
- Todas las canciones están agrupadas y realizar consultas que mezclen canciones y artistas son rápidas y eficientes (siempre que crees los correspondientes índices en la base de datos)
- Si tuvieras que realizar consultas buscando canciones, no tendrías que buscar entre un número elevado de tablas sino en una sola.


Un saludo!
__________________
No hay cuerda desafinada sino músico progresivo
  #6 (permalink)  
Antiguo 18/09/2011, 13:18
 
Fecha de Ingreso: mayo-2009
Ubicación: Los Cerrillos
Mensajes: 5
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Un "while" dentro de otro, y necesito que cambien las variables

Muchas gracias por su atencion, gracias a sus aportes arme esto que parece haber funcionado:
Código PHP:
Ver original
  1. while($rows = mysql_fetch_array($artistas))
  2.                 {
  3.                   echo "<tr>";
  4.                   echo "<td align='center'><img src='http://" . $rows['imagen'] . "'></td>";
  5.                   echo "</tr><tr>";
  6.                   echo "<td align='center'>- <u>" . $rows['artista'] . "</u> -</td>";
  7.                   echo "</tr>";
  8.                   echo "<tr>";
  9.                   echo "<td>";
  10.                                    
  11.                                        
  12.                                                                        
  13.                                     //while($row = mysql_fetch_array(mysql_query("SELECT * FROM WHERE Artista='".$rows['artista']."'")))
  14.                                     //{
  15.                                     //  echo "".$row['cancion']. "<br>" ;
  16.                                     //}
  17.                                    
  18.                                    
  19.                                     $SQL = "SELECT * FROM ".$rows['artista']."";
  20.                                     $canciones = mysql_query($SQL);
  21.                                     while($row = mysql_fetch_array($canciones)){
  22.          
  23.                                       echo "<br><a href='http://".$row['link']."' target='_blank'/>".$row['cancion']. "</a> <i>".$row['ft']."</i>" ;
  24.          
  25.                                     }
  26.                  
  27.                   echo "</td>";
  28.                   echo "</tr>";
  29.                   echo "<tr><td><img src='http://locuraurbana.com/images/divisor1.png'></td></tr>";
  30.                 }

Muchas gracias, en serio.

Etiquetas: arrays, mysql, tablas, variables
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 10:27.