Foros del Web » Programando para Internet » PHP »

Devolver datos de dos tablas relacionadas mediante 1 consulta

Estas en el tema de Devolver datos de dos tablas relacionadas mediante 1 consulta en el foro de PHP en Foros del Web. Buenas tardes, soy bastante principiante en esto, y tengo hecho un formulario que me hace una consulta a una tabla, que funciona bien. Quería añadir ...
  #1 (permalink)  
Antiguo 26/09/2008, 09:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 166
Antigüedad: 15 años, 7 meses
Puntos: 1
Devolver datos de dos tablas relacionadas mediante 1 consulta

Buenas tardes,

soy bastante principiante en esto, y tengo hecho un formulario que me hace una consulta a una tabla, que funciona bien. Quería añadir que además, me devolviera los datos de otra tabla relacionada, pero no consigo que me salga :(

ahora mismo, el query lo hago así:

$querydb= mysql_query("select * from dbcanciones where ".$escogertipo." like '%".$textoabuscar."%'");
$numresultados=mysql_num_rows($querydb);
for($i=0;$i<$numresultados;$i++) {
$row=mysql_fetch_array($querydb);
echo stripslashes($row["campo1"])."-";
echo stripslashes($row["campo2"])."<br>";

que lo que hace, es que según la variable del formulario escoger tipo, me busca en una tabla o en otra, y con la variable texto a buscar pues busca en esa tabla los campos que queremos buscar. Lo que quiero a partir de aquí, es que además devuelva los datos de otra tabla por medio de la relación entre ambas. Tengo entendido que la teoría para enlazar entre dos tablas es así:
SELECT * from tabla1.tabla2 where tabla1.campo1=tabla2.campo2

Pues eso, que a muy pesar de mis bajos conocimientos, y por mucho que me leo la teoría (ya sabeis que en los tutoriales poca práctica hay ... jeje) Pues no se como incorporar eso a la búsqueda según los datos que se recogen en los formularios que describo arriba. ¿Me podría ayudar alguien por favor...?

Muchas gracias por anticipado y un saludo.
  #2 (permalink)  
Antiguo 26/09/2008, 09:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Devolver datos de dos tablas relacionadas mediante 1 consulta

Antes que nada necesitás un campo común que relacione a ambas.

Imaginate un sistema de registro de compras, una tabla contiene datos de clientes y otra contiene las compras que cada cliente hace.

Supongamos que los campos en la tabla de clientes son "ID, nombre, apellido" y los campos en la tabla de compras son "producto, precio, cliente"

La "gracia" es que el campo "cliente" en la tabla de compras es igual a alguno de los ID en la tabla de clientes, y así se relacionan ambas. Entonces, podrías obtener las compras de un cliente haciendo una consulta como esta:

Código sql:
Ver original
  1. SELECT clientes.nombre, clientes.apellido, compras.producto, compras.precio
  2. FROM compras, clientes
  3. WHERE clientes.ID = compras.cliente

Que te devolvería tuplas como ésta, conteniendo datos de ambas tablas.:

"Juan", "González", "taladro", "500"
"Pedro", "Gómez", "martillo", "20"


Espero habértelo explicado bien.
Saludos.
  #3 (permalink)  
Antiguo 26/09/2008, 09:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 166
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Devolver datos de dos tablas relacionadas mediante 1 consulta

Hoola, muchas gracias, pero eso ya lo tengo hecho ^^

Lo que no sé, es como modificar el código que ya tengo, que sólo devuelve los datos de una de las tablas, para que las devuelva de las dos.

Gracias por anticipado y un saludo
  #4 (permalink)  
Antiguo 26/09/2008, 10:17
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Devolver datos de dos tablas relacionadas mediante 1 consulta

con el SELCT * te debe de devolver todos los registros de todas las tablas involucradas...

Si tienes select t1.* from t1, t2 where t1.c1=t2.c1 aqui solo te devolveria los campos de la tabla t1

Como dato adicional es mas recomendable usar INNER JOIN para este tipo de querys

SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1=tabla2.campo2 WHERE condicion=X

Asi la consulta se realiza de una forma mas optima...
__________________
Una demo siempre funcionará correctamente hasta que toque algo tu (hasta ahora) cliente.
Avatar810
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 03:51.