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.