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

se puede utilizar MATCH AGAINST sobre dos tablas relacionadas?

Estas en el tema de se puede utilizar MATCH AGAINST sobre dos tablas relacionadas? en el foro de Mysql en Foros del Web. hola gente, como puse en el título necesito saber si se puede utilizar MATCH AGAINST sobre dos tablas relacionadas tengo tres tablas (no tienen todas ...
  #1 (permalink)  
Antiguo 11/03/2008, 14:05
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
se puede utilizar MATCH AGAINST sobre dos tablas relacionadas?

hola gente,

como puse en el título necesito saber si se puede utilizar MATCH AGAINST sobre dos tablas relacionadas

tengo tres tablas (no tienen todas las columnas, copio solo lo que sirve para esta consulta):

`conferenciantes` (
`id` int(11) NOT NULL auto_increment,
`nombre` varchar(100) NOT NULL default '',
`apellido` varchar(100) NOT NULL default '',
`tema` int(11) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `nombre_2` (`nombre`,`apellido`)
) ENGINE=MyISAM

conferencias` (
`id` int(11) NOT NULL auto_increment,
`id_conf` int(11) NOT NULL default '0',
`titulo` varchar(255) NOT NULL,
`descripcion` text NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `titulo_2` (`titulo`,`descripcion`)
) ENGINE=MyISAM

`temas` (
`id` int(11) NOT NULL auto_increment,
`nombre` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `nombre` (`nombre`)
) ENGINE=MyISAM

intenté meterle siguiente código y nada:
Código:
consulta SQL:  

SELECT c.nombre, c.apellido, t.nombre AS tema, cc.titulo, cc.descripcion
FROM conferenciantes c, temas t, conferencias cc
WHERE MATCH (

c.nombre, c.apellido, cc.titulo, cc.descripcion
)
AGAINST (
'nombre'
)
AND c.tema = t.id
AND c.id = cc.id_conf
LIMIT 0 , 30 

MySQL ha dicho:  

#1210 - Incorrect arguments to MATCH
si hago la consulta separada (en cada una de las tablas me funciona), no me funciona cuando intento meter columnas de dos tablas diferentes.

Alguien pudo solucionar este tipo de busquedas??

desde ya muchas gracias.
  #2 (permalink)  
Antiguo 18/07/2009, 12:24
 
Fecha de Ingreso: marzo-2006
Mensajes: 66
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: se puede utilizar MATCH AGAINST sobre dos tablas relacionadas?

Se que el POST es antigüo, pero nadie respondió y estoy presentando exactamente el mismo inconveniente. ¿Es posible usar MATCH AGAINST en varias tablas al mismo tiempo?
  #3 (permalink)  
Antiguo 19/07/2009, 09:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: se puede utilizar MATCH AGAINST sobre dos tablas relacionadas?

The Stranger,
lo que no puedes hacer, creo, es un índice de dos campos de distintas tablas, pero tú puedes crear dos índices, uno para los campos de cada una de las tablas, y luego buscar con AND u OR, según lo que quieras.
Creas un índice fulltext de los campos campo1, campo2 de la tabla1 y campo1 de la tabla2, unidas por los campos id y refid, respectivamente, y luego puedes hacer:
SELECT t1.campo1, t1.campo2, t2.campo2 FROM tabla1 t1 INNER JOIN tabla2 t2 ON t1.id = t2.refid WHERE MATCH (t1.campo1, t1.campo2) AGAINST ('loquebusques') AND MATCH (t2.campo1) AGAINST('loquebusques')

No lo he probado. Naturalmente, quizás no es lo que quieres, pero creo que no puedes hacer índices de campos de tablas distintas. Con AND y OR puedes encontrar diversas soluciones.
  #4 (permalink)  
Antiguo 19/07/2009, 15:57
 
Fecha de Ingreso: marzo-2006
Mensajes: 66
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: se puede utilizar MATCH AGAINST sobre dos tablas relacionadas?

Hola Jurena,

Gracias por la respuesta. De hecho ví un post tuyo en: http://www.php-hispano.net/foros/MySQL/29306 durante la búsqueda de una solución.

Probaré lo que propones y te diré que tal me fue.

¡Gracias!
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:33.