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

Buscar en más de una tabla

Estas en el tema de Buscar en más de una tabla en el foro de Bases de Datos General en Foros del Web. Hola, tengo 3 tablas: provincias, categorias, publicidad y quería realizar una busqueda en la tabla publicidad que sea por ejemplo: buenos aires hoteles . El ...
  #1 (permalink)  
Antiguo 31/01/2009, 20:12
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 10 meses
Puntos: 36
Buscar en más de una tabla

Hola, tengo 3 tablas: provincias, categorias, publicidad y quería realizar una busqueda en la tabla publicidad que sea por ejemplo: buenos aires hoteles.

El problema es que esa información en la tabla publicidad la tengo en INT que es el id de la tabla provincias y categorias.

Lo que se me ocurre es hacer una busqueda en las dos primeras (provincias, categorias) y obtener el valor id de por ejemplo buenos aires.

Entonces se me ocurren dos alternativas a continuación:

1. En la primer consulta obtendría los ids de las dos primeras tablas y hago que queda una variable $res= " OR provincia=3 OR categoria=7";

SELECT * FROM publicidad WHERE (MATCH (nombre, direccion) AGAINST ('$buqueda')) $res

-----------------------------------------------------------------------------------------

2. Pasar a FULLTEXT los campos provincia, categoria (de la tabla publicidad) para esto deberían pasar a ser VARCHAR en vez de INT.

Con la primer consulta que hago a las dos tablas obtendría algo como: "3 7" lo cual lo incluiria en la variable $busqueda quedando = "buenos aires hoteles 3 7"; ahora puedo hacer toda la consulta con solo el MATCH

SELECT * FROM publicidad WHERE MATCH (nombre, direccion,provincia,categoria) AGAINST ('$buqueda')

--------------------------------------------------------------------------------------------

Cuál les parece mejor?

Espero haber sido claro, sino avisenme.

Gracias.
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #2 (permalink)  
Antiguo 31/01/2009, 20:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Buscar en más de una tabla

Hola hgp147,

Porque no haces 2 Joins a las otras tablas para a la hora de hacer la busqueda obtener los resultados?

Saludos
  #3 (permalink)  
Antiguo 01/02/2009, 08:24
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 10 meses
Puntos: 36
Respuesta: Buscar en más de una tabla

Hola GatorV, gracias por responderme. Podrias darme una idea de como sería usando JOINS.

Gracias.
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #4 (permalink)  
Antiguo 01/02/2009, 08:50
Avatar de MaTyS  
Fecha de Ingreso: enero-2009
Ubicación: Mar del Plata
Mensajes: 220
Antigüedad: 15 años, 9 meses
Puntos: 18
Respuesta: Buscar en más de una tabla

No intentaste hacer mas de una consulta a la vez ?
O hace un array :P
  #5 (permalink)  
Antiguo 01/02/2009, 12:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Buscar en más de una tabla

Un Join es algo simple:
Código sql:
Ver original
  1. SELECT t1.dato, t2.otro_dato FROM tabla1 AS t1 INNER JOIN tabla2 AS t2 ON t1.pk =t2.foreign_key

En el foro de Bases de Datos te pueden asesorar más a detalle como hacer un Join.

Saludos
  #6 (permalink)  
Antiguo 01/02/2009, 13:46
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 10 meses
Puntos: 36
Respuesta: Buscar en más de una tabla

Mirá llegue a hacer esto:

SELECT t1.categoria, t2.categoria FROM categorias AS t1 INNER JOIN publicidad AS t2 ON t2.categoria=t1.id WHERE MATCH (t1.categoria,t2.nombre) AGAINST ('hotel pepe')

Pero me produce un error: Agumentos erroneos para MATCH, si saco t2.nombre, no produce ese error.

Nuevamente gracias a todos por su ayuda.
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/

Última edición por hgp147; 01/02/2009 a las 13:55
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 17:35.