Foros del Web » Programando para Internet » PHP »

Link a tablas o campos de db.

Estas en el tema de Link a tablas o campos de db. en el foro de PHP en Foros del Web. Hola como estan? Mi duda es la siguiente. Tengo una base de datos compuesta por dos tablas: -Artistas - idartista - nombre -Lirics - idartista ...
  #1 (permalink)  
Antiguo 11/06/2005, 12:08
 
Fecha de Ingreso: junio-2005
Mensajes: 13
Antigüedad: 12 años, 6 meses
Puntos: 0
Link a tablas o campos de db.

Hola como estan?
Mi duda es la siguiente.

Tengo una base de datos compuesta por dos tablas:
-Artistas
- idartista
- nombre
-Lirics
- idartista
- cancion

Desde php me conecto a la base de datos y realizo la consulta para listar todos los artistas ordenados por nombre del siguiente modo:

$result=mysql_query("SELECT * FROM artistas ORDER BY nombre", $conexion);

Con eso obtengo una página con todos los artistas de la base de datos... lo que necesito es que al precionar en uno de los artistas me lleve a otro sitio en donde me muestre las canciones correspondientes a ese artista.
Las tablas "artistas" y "lyrics" tienen un campo en común que es "idartista"... según estuve leyendo en el faq hay sentencias como "inner join" que me permiten relacionar dos tablas y demás pero estoy desorientado.

Entonces, simplemente necesitaria saber como al presionar en uno de los artistas me aparezcan en otra página las canciones que corresponden a ese artista.

Muchísimas gracias.
  #2 (permalink)  
Antiguo 11/06/2005, 12:26
Avatar de braulito  
Fecha de Ingreso: abril-2004
Ubicación: Cusco - Perú
Mensajes: 597
Antigüedad: 13 años, 7 meses
Puntos: 8
No es necesario el "INNER JOIN", simplemente en la primera página haces links del tipo
Código HTML:
<a href="lyrics.php?idartista=<?php echo $result['idartista']?>">Mar de Copas</a> 
y en la página lyrics.php, recibes la variable
Código PHP:
$idartista $_GET["idartista"]; 
y haces otra consulta
Código PHP:
$lyrics mysql_query("SELECT * FROM lyrics WHERE idartista = $idartista"$conexion); 
Y ahi tienes toda la info de tu artista.

Si tienes mas dudas, sólo exponlas. Saludos
__________________
Braulio Soncco
braulio at buayacorp dot com
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 11/06/2005, 14:37
 
Fecha de Ingreso: junio-2005
Mensajes: 13
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias!

Gracias por la respuesta... de todos modos no he podido hacer mucho porque se me llena la pantalla de errores jeje.

Aquí les envío algunos datos para que entiendan mejor:

artistas.php (muestra los artistas q estan en la tabla "artistas" de la db)
--------------------------------------------------------------------------
<title>Artistas</title>
<body bgcolor="#FFFFFF">
<table width="39%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>
<div align="center">
<?
include "conexion.php";
$result=mysql_query("SELECT * FROM artistas ORDER BY nombre", $conexion);
echo"<table width=300 align=center>
<tr>
<td><div align=center><b>Nombre de Artista</b></td>
</tr>";
while($row=mysql_fetch_row($result)){
echo"<tr>
<td><div align=center><a href=\"lyrics.php\">$row[1]</a></td>
</td>
</tr>";
}
echo"</table>";
include "cerrar_conexion.php";
?>
</div>
</td>
</tr>
</table>

--------------------------------------------------------------------------
Lo que quiero hacer es modificar ese sitio para que al presionar en un artista me envie a la página de lyrics (q aun no la tengo creada, porque desconozco su estructura), pero que la página de lyrics muestre las canciones (tabla: lyrics, campo: cancion) correspondientes al artista que seleccioné.
Es muy complicado eso?
Si se complica mucho, podrían darme algunas pautas para evitar tanto enrollo?
Muchas gracias!!!!
  #4 (permalink)  
Antiguo 12/06/2005, 04:08
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
No es nada complicado y ya te dijeron en la respuesta anteriopr cómo hacerlo...

La cuestión está así:
- Haces una consulta general de los artístas.. los muestras (creo aquí todo bien ¿no?).
- Creas tu enlace enviando una variable por URL (el primer código que te dejaron)
- Recojes esa variable (segundo código)
- Aplicas lo recojido en una nueva consulta... (tercer código).. aquí es donde "muestras las canciones correspondientes a el artista que seleccionaste" (ocupando exactamente tus palabras).. entonces ve que el dato que debes enviar por URL debe corresponder a dicho artísta, no necesariamente un nombre... una id podría ser... cualquier cosa que relacione tus tablas... según veo en tu estructura sería el campo idartista.. perfecto!.

Repito: no es nada complicado... así que no sé que problemas tengas, no somos adivinos así que menciona exáctamente qué errores tienes.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 12/06/2005, 20:31
 
Fecha de Ingreso: junio-2005
Mensajes: 13
Antigüedad: 12 años, 6 meses
Puntos: 0
A ver... vamos por partes:

Ya logré listar todos los usuarios... y probe colocar una url del tipo que me explicaron mas arriba, luego en lyrics.php coloqué los datos que también me colocaron mas arriba y pude hacer funcionar el sistema. Sin embargo, una duda tremenda es:

La forma de url que coloco deberia ser general...y que automáticamente determine cual es el indice o "idartista" para que envie correctamente a las canciones que corresponden.
Ejemplo:

lyrics.php?idartista=1
lyrics.php?idartista=2
lyrics.php?idartista=3

y así sucesivamente de acuerdo al presionar en uno de los artistas... yo listo los usuarios con un bucle while y una sola url para todos ellos, por eso no se como deberia ser la url general que automaticamente capture el indice o "idusuario".

while($row=mysql_fetch_row($result)){
echo"<tr>
<td><div align=center><a href=\"lyrics.php\">$row[1]</a></td>
</td>
</tr>";
}

Gracias!
  #6 (permalink)  
Antiguo 12/06/2005, 20:43
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... volvemos... vaz a crear un enlace a lyrics.php, vaz a pasar una variable, esto con ?variable= (en el código la variable es idartista... y poco importa el nombre), dicha variable tendrá un valor diferente y correspondiente a los registros que enlistas... en el códito que te dejaron mencionaron <?php echo $result['idartista']?> y que, supongo para tí sería un $row[0]...

... verás que solo menciono lo que ya te han dicho... hay que procurar leer mejor .

Solo adivinando:
Código PHP:
while($row=mysql_fetch_row($result)){
echo
"<tr>
<td><div align=center><a href=\"lyrics.php?idartista="
.$row[0]."\">".$row[1]."</a></td>
</td>
</tr>"
;

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 12/06/2005 a las 20:48
  #7 (permalink)  
Antiguo 13/06/2005, 18:14
 
Fecha de Ingreso: junio-2005
Mensajes: 13
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias por la ayuda!!!
Ya funciona todo lo expuesto en este topic... hice las pruebas y anda exelente... ahora les comento algunos nuevos desafíos (para mí ya que soy principiante jeje):

Como puedo colocar mas de una canción por artista?
En la tabla "lyrics" tengo dos campos: "idartista" y "cancion".
Cuando coloco dos canciones diferentes con el mismo id de "idartista" me sale un error en phpmyadmin diciendome que los indices son iguales y no es válido.

Otra pregunta es si es muy complicado hacer un panel en donde pueda agregar nuevos artistas o canciones sin necesidad de ingresar a mysql y phpmyadmin para administrar eso.

Pueden ver un ejemplo de lo que llevo aqui:
http://extreme.mundoserver.net/sitio...sitio=artistas

Perdon por las preguntas que tal vez son muy novatas... pero mi único motivo es aprender y aquí gracias a todos ustedes estoy aprendiendo muchas cosas nuevas.

Saludos!!

Última edición por sebitazextreme; 13/06/2005 a las 19:06
  #8 (permalink)  
Antiguo 13/06/2005, 21:40
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 12 años, 7 meses
Puntos: 1
tendrias que cambiar la tabla lyrics, supongo que tu tienes una tabla con campos idartista y lyrics.
A esta tabla agregale un campo artista, con lo cual te quedaria idartista, artista, lyrics.

entonces en la primera pagina donde tienes el listado de artistas solamente tienes que cambiar
Código PHP:
//cambias <a href=\"lyrics.php\">".$row[1]."</a> por 
//<a href=\"lyrics.php?artista=".$row[1]."\">".$row[1]."</a>
while($row=mysql_fetch_row($result)){ 
echo
"<tr> 
<td><div align=center>
<a href=\"lyrics.php?artista="
.$row[1]."\">".$row[1]."</a>
</td> 
</td> 
</tr>"


entonces en tu pagina lyrics.php debes hacer la consulta, en donde el artista que buscas, es igual al recibido por la URL:

Código PHP:
$artista=$_GET["artista"];
$sent="SELECT lyrics FROM tabla WHERE artista='$artista'"
espero que te sirva.
  #9 (permalink)  
Antiguo 13/06/2005, 22:04
 
Fecha de Ingreso: junio-2005
Mensajes: 13
Antigüedad: 12 años, 6 meses
Puntos: 0
Si a eso ya lo tengo hecho y funciona perfecto, en la url del post anterior les deje el ejemplo para que vean que seleccionando el artista se redirige directamente a la canción de ese artista... el tema es que no se como poner mas de una cancion para cada artista, tenia pensado colocar en el campo de canciones, más de una canción con un mismo id, es decir con el campo "idartista" en 1 por ejemplo... pero me dice q los indices son iguales y no se permite.

Se entiende a q voy? gracias por colaborar y ayudarme.

Saludos!
  #10 (permalink)  
Antiguo 14/06/2005, 14:12
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 12 años, 7 meses
Puntos: 1
Cita:
Iniciado por sebitazextreme
Si a eso ya lo tengo hecho y funciona perfecto, en la url del post anterior les deje el ejemplo para que vean que seleccionando el artista se redirige directamente a la canción de ese artista... el tema es que no se como poner mas de una cancion para cada artista, tenia pensado colocar en el campo de canciones, más de una canción con un mismo id, es decir con el campo "idartista" en 1 por ejemplo... pero me dice q los indices son iguales y no se permite.

Se entiende a q voy? gracias por colaborar y ayudarme.

Saludos!
por eso te digo que a la tabla lyrics le agregues un campo mas llamado artista entonces alli puedes tener algo como

id | artista | lyrics|
01 | art1 | lyr01 |
02 | art1 | lyr02 |
03 | art1 | lyr03 |
04 | art2 | lyr01 |

por ejemplo, cuando pases por la URL:
lyrics.php?artista=art1

en la consulta SQL tienes algo como:

"SELECT lyrics FROM TABLE where artista='$artista'";
esto hace que te busque todos los lyrics del artista recibido en este caso

lyr01, lyr02, lyr03

creo que esto es lo que estas necesitando, espero que te sea util
  #11 (permalink)  
Antiguo 14/06/2005, 18:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
La cuestión es que --adivino-- el campo idartista en tu tabla Lirics lo tienes como promaryKey. Un campo primaryKey está pensado para que sea único e irrepetible... es la ventaja de dicho campo (usualmente llamado "id") porque tendrás una referencia ÚNICA a un respectivo registro... por ejemplo, cuando quieras consultas un dato ESPECÍFICO (ahora consultas "todos los que tienen X dato") lo tendrás que hacer por una id única....

Bueno, eso por una parte... por otra, ya se te había comentado que necesitas un campo que relacione ambas tablas... algo que las permita "tenerlas conectadas" ( hablando en español). Yo pensé que dicho campo era el llamado idartista (lo mencioné) ¿por qué darle el mismo nombre en las dos tablas entonces?... te sugieren poner otro campo "artísta".. ok, igual dije que cualquier cosa es útil:
Cita:
Iniciado por jam1138
no necesariamente un nombre... una id podría ser... cualquier cosa que relacione tus tablas... según veo en tu estructura sería el campo idartista..
.. por cuestiones de "organización" con los nombres yo me inclinaría por crear un camo "idliric"... que tampoco es necesario tener una primaryKey (solo aconsejable) si no la vaz a ocupar.... Todo es cuestión de organización más que de otra cosa... podrías igual manejar una sola tabla... habrá que ver que es lo más conveniente (si vaz a amenjar muchos datos es mejor lo que tienes).

Cita:
Iniciado por sebitazextreme
(...) es muy complicado hacer un panel en donde pueda agregar nuevos artistas o canciones sin necesidad de ingresar a mysql y phpmyadmin para administrar eso. (...)
No... busca sobre "formularios".

Lo que tienes que hacer es crear un formulario con los campos a insertar, recojer esos datos y concatenar a una query que los inserte (INSERT INTO tabla VALES (...)) y lo demás es lo mismo... (igual busca por "insertar", "insert".. etc).

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 07:10.