Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

SELECT a varias tablas

Estas en el tema de SELECT a varias tablas en el foro de Mysql en Foros del Web. Hola, Tengo una base de datos MySQL y utilizado php. Tengo 4 tablas: general tipologia poblacio general_poblacio_link He hecho un buscado general que tiene que ...
  #1 (permalink)  
Antiguo 11/12/2006, 16:27
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
SELECT a varias tablas

Hola,
Tengo una base de datos MySQL y utilizado php.
Tengo 4 tablas:
general
tipologia
poblacio
general_poblacio_link

He hecho un buscado general que tiene que buscar una palabra en 3 de las tablas: general, tipologia y poblacio.
En general y tipologia lo he conseguido, ya que en la tabla general tengo un id_tipologia de la tabla tipologia.
El problema está en consultar las otras dos tablas. En la tabla població, tengo id_poblacio y nom_població. En la tabla general-poblacio-link, tengo general_id y poblacio_id.

Si introducen el buscador el nombre de la población tendria que mirar en la tabla població que id tiene y luego buscar en la tabla general-poblacio-link cuantos general_id tiene asociado para poder mostrar desde la tabla general los datos que me interesan.

No se si me he explicado muy bien.
Os dejo el código que tengo hasta ahora en la que me busca bien en general.nom_general y en tipologia (lo he solucionado con un JOIN)

Código PHP:
  <?
$link
=mysql_connect("localhost""user""01234") or die ("no m'he pogut conectar"); // me conecto a la base de dades
$llistat_titols=$_POST['text_titol'];  // recullo la variable del formulari
$bd=mysql_select_db("molinar",$link) or die ("no puc conectar a la BBDD"); // selecciono la base de dades de treball
$query="SELECT * FROM general LEFT JOIN tipologia ON general.tipologia_id = tipologia.id_tipologia WHERE general.titol_general LIKE '%$llistat_titols%' OR tipologia.nom_tipologia LIKE '%$llistat_titols%'"// faig la cerca
$result mysql_query($query$link) or die ("Error en: $query. " mysql_error());
?>
Supongo que tengo que seguir haciendo JOIN's pero són CUATRO tablas y me pierdo. Alguien me puede ayudar??
Gracias de antemano.
  #2 (permalink)  
Antiguo 11/12/2006, 16:58
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: SELECT a varias tablas

Que tal Promedea.

La siguiente consulta es un join entre cuatro tablas mostrando todos los campos repectivos, considerando que solo se relacionan con un campo.

Código:
SELECT t1.*, t2.* t3.* t4.*
FROM tabla1 
    INNER JOIN tabla2 t2 ON t1.CampoA = t2.CampoA
    INNER JOIN tabla3 t3 ON t2.CampoB = t3.CampoB
    INNER JOIN tabla4 t4 ON t3.CampoC = t4.CampoC
Sí quieres ayuda más específica, por favor describe la estructura de tus tablas ( no es necesario todo ) sólo los campos más importantes, además de incluir las relaciones, es decir, mediante que campo se relacionan.

Saludos y suerte!
  #3 (permalink)  
Antiguo 11/12/2006, 17:01
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
De acuerdo Re: SELECT a varias tablas

Gracias Daniel por la respuesta.
Lo he hecho como indicas y me ha salido bien, a la primera!!!!!
Creo que empiezo a entender como funciona esto.

Tengo otra duda,
Al dejar el campo en blanco me lista toda la tabla.
Quisiera que no mostrara nada. Se puede hacer?

Saludos
  #4 (permalink)  
Antiguo 11/12/2006, 17:31
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
Desacuerdo Re: SELECT a varias tablas

Bueno pues resulta que me funciona, pero algunos resultados me salen repetidos y no se porqué
Os paso el cógigo que utilizado.

Código PHP:
$query="SELECT *
FROM general
INNER JOIN
tipologia ON general.tipologia_id = tipologia.id_tipologia 
INNER JOIN
general_poblacio_link ON general.id_general=general_poblacio_link.general_id
INNER JOIN 
poblacio ON poblacio.id_poblacio=general_poblacio_link.poblacio_id
WHERE general.titol_general LIKE '%$llistat_titols%' OR tipologia.nom_tipologia LIKE '%$llistat_titols%' OR poblacio.nom_poblacio LIKE '%$llistat_titols%'"
// faig la cerca
$result mysql_query($query$link) or die ("Error en: $query. " mysql_error());
?> 
Cuando busco por nombre del título (campo=titol_general) es cuando me salen repetidos los archivos, algunos 10 veces, otros 3, algunos solo me salen una vez. No entiendo que puede ser.

Espero ayuda, gracias
  #5 (permalink)  
Antiguo 11/12/2006, 17:53
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: SELECT a varias tablas

Hola Promeda.

Sí se el porque de los repetidos, lo que sucede es que entre tus tablas tienes una relacion uno a muchos, es decir, en una llave primaria de tus tablas tiene varias registros con llave foranea en otra tabla.

Por ejemplo, una tabla con listado de Madres tiene varios registros ( no necesariamente ) en una tabla de Hijos. Quizá eso se este dando cuando relacionas las tus tablas general y población.

Ahora bien, esto se puede evitar poniendo en el SELECT solo los campos que necesitas y no todos ( * ) , y usando DISTINCT o GROUP BY, más o menos como lo siguiente:

Código:
SELECT DISTINCT Campo1, campo2, Campo3
FROM tabla1 
    INNER JOIN tabla2 t2 ON t1.CampoA = t2.CampoA
    INNER JOIN tabla3 t3 ON t2.CampoB = t3.CampoB
    INNER JOIN tabla4 t4 ON t3.CampoC = t4.CampoC
Repecto a tu duda:
Cita:
Al dejar el campo en blanco me lista toda la tabla.
Quisiera que no mostrara nada. Se puede hacer?
Esto lo puedes hacer con el lenguaje que usas, hasta donde entiendo es php, pero de eso no sé mucho ( o sea nada ) . Le puedes enviar un mensaje al usuario indicandolé que debe poner un valor.

Espero haber sido claro.

Saludos y suerte!
  #6 (permalink)  
Antiguo 12/12/2006, 04:21
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
De acuerdo Re: SELECT a varias tablas

Gracias, ya està resuelto.
Saludos
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 04:49.