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

Ordenar por número de coincidencias sin Match Against

Estas en el tema de Ordenar por número de coincidencias sin Match Against en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 12/04/2014, 04:17
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 11 años
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?
  #2 (permalink)  
Antiguo 14/04/2014, 16:42
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 14 años
Puntos: 3
Respuesta: Ordenar por número de coincidencias sin Match Against

bueno primero tu tabla, le falta normalizar la columna keywords debe ir en otra tabla, para taner una polaridad o dependencia 1 a N

si continua con la estructura que tienes yo te recomendaría probaras, con esta query

Código SQL:
Ver original
  1. SELECT *, COUNT(keywords) total FROM libros
  2.  WHERE tipo = 'nuevo'  AND
  3.  keywords LIKE '%Ladrona%' OR keywords LIKE '%Libros%' OR keywords LIKE '%2014%'
  4.  GROUP BY id_libro HAVING total > 0 ORDER BY total DESC, posicion ASC, precio DESC
  #3 (permalink)  
Antiguo 29/04/2014, 04:17
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 11 años
Puntos: 1
Respuesta: Ordenar por número de coincidencias sin Match Against

Cita:
Iniciado por Hufex Ver Mensaje
bueno primero tu tabla, le falta normalizar la columna keywords debe ir en otra tabla, para taner una polaridad o dependencia 1 a N
¿A qué te refieres con lo de la polaridad y lo de 1 a N? He buscado cosas como "MySQL polaridad" y no encuentro lo que signinifica.

Etiquetas: coincidencias, match, null, select, sql, tabla
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 23:15.