Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/04/2014, 04:17
juanito_29899
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 10 años, 5 meses
Puntos: 1
Ordenar por número de coincidencias sin Match Against

Hola.

No quiero usar Match Against debido a que si tengo muchas keywords en una misma fila no consigo la relevancia que quiero al hacer una consulta. La meta es conseguir que lo ordene por el número de coincidencias.

Estos son los datos de la base de datos MySQL que uso actualmente para hacer las pruebas:

Código MySQL:
Ver original
  1. --
  2. -- Base de datos: `libros`
  3. --
  4.  
  5. -- --------------------------------------------------------
  6.  
  7. --
  8. -- Estructura de tabla para la tabla `libros`
  9. --
  10.  
  11. CREATE TABLE `libros` (
  12.   `id_unico` int(11) NOT NULL,
  13.   `titulo` text NOT NULL,
  14.   `id_libro` text NOT NULL,
  15.   `tipo` text NOT NULL,
  16.   `posicion` int(11) NOT NULL,
  17.   `precio` float(20,2) NOT NULL,
  18.   `keywords` text NOT NULL,
  19.   `proveedor` text NOT NULL,
  20.   PRIMARY KEY  (`id_unico`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  22.  
  23. --
  24. -- Volcar la base de datos para la tabla `libros`
  25. --
  26.  
  27. INSERT INTO `libros` VALUES (1, 'La ladrona de los libros', '9788426419866', 'nuevo', 200, 10.00, 'Ladrona, Libros, Ladron', 'eBay');
  28. INSERT INTO `libros` VALUES (2, 'Los surcos del azar', '9788415685364', 'nuevo', 3, 13.00, 'Surcos, Azar', 'Marcelo');
  29. INSERT INTO `libros` VALUES (3, 'Los surcos del azar', '9788415685364', 'nuevo', 5, 15.00, 'Surcos, Azar', 'Amazon');
  30. INSERT INTO `libros` VALUES (4, 'El castillo', '9788467520170', 'nuevo', 10, 20.00, 'Castillo, Medieval', 'Marcelo');
  31. INSERT INTO `libros` VALUES (5, 'El Castillo', '9788467520170', 'nuevo', 5, 15.00, 'Castillo, Medieval', 'Casa del libro');
  32. INSERT INTO `libros` VALUES (6, 'La jungla de los listos', '9788467040470', 'nuevo', 6, 30.00, 'Jungla, Libros', 'eBay');
  33. INSERT INTO `libros` VALUES (7, 'La jungla de los libros', '9788467040470', 'nuevo', 4, 19.00, 'Jungla, Libros', 'Amazon');
  34. INSERT INTO `libros` VALUES (8, 'La ladrona de los libros', '9788426419866', 'nuevo', 99, 40.00, 'Ladrona, Libros, Ladron, 2014', 'Luis');
  35. INSERT INTO `libros` VALUES (9, 'La ladrona de los libros', '9788426419866', 'nuevo', 21, 22.00, 'Ladrona, Libros, Ladron', 'Lili');

La consulta que ejecuto es la siguiente:

Código MySQL:
Ver original
  1. IF(keywords LIKE '%Ladrona%', 1, 0) +
  2. IF(keywords LIKE '%Libros%', 1, 0) +
  3. IF(keywords LIKE '%2014%', 1, 0)
  4. ) total FROM libros
  5.  WHERE tipo = 'nuevo' GROUP BY id_libro HAVING total > 0 ORDER BY total DESC, posicion ASC, precio DESC

Quiero que me devuelva el id_unico "8" en primer resultado y no lo consigo. En lugar de eso devuelve el id_unico 1 y el 6 respectivamente. ¿Qué debo hacer?