Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2008, 10:32
Avatar de qwerty_wq
qwerty_wq
 
Fecha de Ingreso: enero-2005
Mensajes: 109
Antigüedad: 20 años
Puntos: 1
Ordenar por número de coincidencias

Buenas. Tengo el siguiente problema, a ver si podéis ayudarme. Disponemos de dos tablas, una que contiene nombres de productos con un ID numérico asociado, y otra que contiene keywords (o palabras clave) asociadas a cada producto. Por ejemplo:

TABLA 'productos'

Código:
ID    NOMBRE
1     Apple Macbook Pro
2     Apple Macbook
3     Apple iPod
4     Dell XPS M1330
TABLA 'keywords'

Código:
KEYWORD    ID_PRODUCTO
Apple      1
Apple      2
Apple      3
Macbook    1
Macbook    2
Pro        1
iPod       3
Dell       4
XPS        4
M1330      4
Bien, creo que la idea es bastante sencilla e intuitiva. Ahora supongamos que un usuario quiere buscar "Apple Macbook Pro". Lo que quiero hacer es mostrar los resultados de los productos por coincidencia con el NÚMERO (el orden da igual) de keywords, de mayor a menor. Y así, como resultado de la anterior búsqueda los productos serían, por orden:

1 Apple Macbook Pro
2 Apple Macbook
3 Apple iPod

Ya que los tres productos tienen la palabra "Apple" el segundo tiene además la palabra "Macbook" y el primero las tiene todas.

Si buscase "Apple iPod" el resultado sería:

3 Apple iPod
2 Apple Macbook
1 Apple Macbook Pro

Aquí el segundo y tercer puestos pueden intercambiarse, porque ambos sólo tienen una coincidencia ["Apple"] con la búsqueda. Creo que se entiende bien.

Mi pregunta es, ¿cómo puedo hacer esto con una consulta MySQL? Me vale cualquier lenguaje de bases de datos (y por eso lo pongo en este foro), ya que sé un poco de todos y lo podría adaptar fácilmente a MySQL.

He probado a hacer un LEFT JOIN por cada palabra clave de búsqueda y luego ordenándolos por número de keywords en los resultados, pero esto no me sirve porque se da prioridad a los resultados de la primera tabla, y si una persona introduce la búsqueda "Ordenador Apple Macbook" no se devuelve ningún resultado, ya que "Ordenador" es una palabra "intrusa". Y por supuesto, también se dan problemas cuando las palabras no son intruducidas en el orden determinado.

¿Alguien sabe cómo hacer lo que quiero?

Gracias.

PD: lo que he puesto es sólo un ejemplo, pero imaginarios una tabla con decenas de miles de productos, cada uno más de media docena de palabras clave. El tiempo de búsqueda puede ser inviable.