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

Búsqueda match against en diferentes tablas a la vez

Estas en el tema de Búsqueda match against en diferentes tablas a la vez en el foro de Mysql en Foros del Web. Hola a todos. Acabo de descubrir la función match against de MySQL, para programar un buscador en una de mis webs. Lo que pasa, es ...
  #1 (permalink)  
Antiguo 20/07/2011, 01:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 198
Antigüedad: 16 años, 6 meses
Puntos: 3
Búsqueda match against en diferentes tablas a la vez

Hola a todos.

Acabo de descubrir la función match against de MySQL, para programar un buscador en una de mis webs.
Lo que pasa, es que el contenido de mi web está dividido en diferentes tablas (algunas no relacionadas), y quería que el buscador buscara en todas las tablas y mostrara los resultados relacionados con la búsqueda.

Para que lo entendáis mas claro, esta es la consulta que hago, pero evidentemente no funciona:


SELECT * FROM cultura_tradiciones,agenda,hoteles WHERE MATCH (cultura_tradiciones.nombre, cultura_tradiciones.descripcion, agenda.nombre, agenda.descripcion, hoteles.nombre) AGAINST ('$busqueda' IN BOOLEAN MODE)


Alguien sabe si se puede hacer esto? O es directamente imposible??

Gracias a todos por vuestro tiempo!
__________________
----------
Modelo de carta

Letter samples
  #2 (permalink)  
Antiguo 20/07/2011, 15:35
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Búsqueda match against en diferentes tablas a la vez

Y si haces una vista que contenga tu viejo select y despues buscas sobre la vista ?

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 20/07/2011, 15:41
 
Fecha de Ingreso: mayo-2008
Mensajes: 198
Antigüedad: 16 años, 6 meses
Puntos: 3
Respuesta: Búsqueda match against en diferentes tablas a la vez

Gracias Marvin, pero no se exactamente a que te refieres? Sería mucho pedir que me mostraras un ejemplo? Mil gracias
__________________
----------
Modelo de carta

Letter samples
  #4 (permalink)  
Antiguo 20/07/2011, 16:00
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Búsqueda match against en diferentes tablas a la vez

Si tu consulta antigua era:
Código mysql:
Ver original
  1. SELECT campo1, campo2, etc
  2. FROM cultura_tradiciones, agenda, hoteles
Puedes crear una vista asi:
Código mysql:
Ver original
  1. CREATE VIEW prueba_vista AS
  2. SELECT campo1, campo2, etc
  3. FROM cultura_tradiciones, agenda, hoteles
Y para buscar el dato (en el futuro) haces esto:
Código mysql:
Ver original
  1. FROM prueba_vista MATCH (nombre_cultura, descripcion_cultura, nombre_agenda, descripcion_agenda, nombre_hotel) AGAINST ('$busqueda' IN BOOLEAN MODE)
Tal vez esto resuelva tu problema de unir todo en un solo lado (no testeado personalmente).

Ojo que las vistas no son tablas, son solo una consulta que se ejecuta cada vez que sea llamada por lo tanto si tus datos cambian en las tablas la vista ya estara actualizada.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 21/07/2011, 04:28
 
Fecha de Ingreso: mayo-2008
Mensajes: 198
Antigüedad: 16 años, 6 meses
Puntos: 3
Respuesta: Búsqueda match against en diferentes tablas a la vez

Gracias marvin, el problema es que al crear la vista así:

CREATE VIEW prueba_vista AS SELECT hoteles.id, hoteles.nombre, hoteles.desc_es FROM cultura_tradiciones, agenda, hoteles

dentro de la vista, aparecen los hoteles repetidos varias veces (como 6 ó 7 veces), porque puede ser??

en cambio, si en el 'FROM' dejo solamente 'hoteles', tal que así:


CREATE VIEW prueba_vista AS SELECT hoteles.id, hoteles.nombre, hoteles.desc_es FROM hoteles

me sale bien, es decir, todos los hoteles, una vez cada uno
__________________
----------
Modelo de carta

Letter samples

Última edición por mitobo; 21/07/2011 a las 04:43
  #6 (permalink)  
Antiguo 21/07/2011, 07:33
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Búsqueda match against en diferentes tablas a la vez

Eso quiere decir que tu consulta esta mal planteada... no es que la vista genere eso, es la consulta la que que esta generando esos resultados.

Revisa la consulta para ver si puedes optimizarla aun mas.

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #7 (permalink)  
Antiguo 21/07/2011, 08:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Búsqueda match against en diferentes tablas a la vez

Por un lado, tienes que recordar que el uso de la coma como sinónimo de JOIN tiene a producir productos cartesianos cuando los campos relacionados de las diferentes tablas no tienen el mismo nombre en todas. Esto significa que si el ID del hotel se llama ID en una tabla e id_hotel en otra, esto generará errores de JOIN, porque la coma intenta emparejar los valores de campos con el mismo nombre.
¿Se entiende?
En estos casos es recomendable usar INNER|LEFT|RIGHT JOIN... ON..., para determinar qué campos de qué tabla se relacionan con qué otro campo de la otra tabla. Hace las consultas más largas de escribir, pero también mucho más precisas.

Por otro lado, si lo que quieres son los datos del hotel, no se entiende para qué quieres hacer un JOIN con las otras tablas.
Al leer sólo las columnas correspondientes a la tabla Hotel, es imposible saber si la repetición de datos es real y afecta a todo el registro, o sólo se está dando en esas columnas, ya que un JOIN entre tablas devolverá datos de todas, y en el resto puede haber variaciones, caso en el que la repetición sólo nos indicaría que hay una relación N:1 entre Hoteles y el resto. Pero no sería un "error", sino que estás definiendo mal el conjunto de columnas que necesitas.

¿Qué es lo que realmente quieres obtener? ¿Los datos del Hotel, o los datos del hotel según una relación dada?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: diferentes, match, select, sql, tabla, tablas, vez
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 10:54.