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

GROUP BY en MATCH AGAINST respetando relevancia

Estas en el tema de GROUP BY en MATCH AGAINST respetando relevancia en el foro de Mysql en Foros del Web. Hola. He buscado en FDW, y gracias a este post: [URL="http://www.forosdelweb.com/f86/group-order-no-devuelven-que-quiero-814669/"] http://www.forosdelweb.com/f86/group-order-no-devuelven-que-quiero-814669/[/URL] Cita: Iniciado por gnzsoloyo Primero ordenar, luego agrupar... Tomando a Huesos52: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 31/01/2014, 10:02
 
Fecha de Ingreso: noviembre-2013
Mensajes: 27
Antigüedad: 11 años
Puntos: 1
GROUP BY en MATCH AGAINST respetando relevancia

Hola.

He buscado en FDW, y gracias a este post:
[URL="http://www.forosdelweb.com/f86/group-order-no-devuelven-que-quiero-814669/"]
http://www.forosdelweb.com/f86/group-order-no-devuelven-que-quiero-814669/[/URL]

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Primero ordenar, luego agrupar...
Tomando a Huesos52:
Código MySQL:
Ver original
  1.    t.id, t.catid, t.name, t.userid, t.subject  
  2.     (SELECT id,  catid,  name,  userid,  subject , thread
  3.     FROM mensajes
  4.     ORDER BY t.id DESC) t
  5. GROUP BY t.thread  

Resolví mi problema de usar ORDER BY y GROUP BY, en un SELECT normal. Pero ahora en ese SELECT tengo MATCH AGAINST y no sé como usar un ORDER BY y un GROUP BY juntos en la consulta.

El código que tengo ahora es este:

Código MySQL:
Ver original
  1. (SELECT *, MATCH(keywords) AGAINST('$busqueda') AS relevancia FROM libros WHERE MATCH(keywords) AGAINST('$busqueda')
  2. AND tipo = 'nuevo'
  3. GROUP BY id_libro ORDER BY relevancia DESC, posicion ASC, precio DESC LIMIT $numero_limite)

He probado a hacer lo mismo siguiendo la misma lógica que en los demás, pero siempre me da error:

Código MySQL:
Ver original
  1. (SELECT *, MATCH(keywords) AGAINST('$busqueda') AS relevancia FROM
  2.  
  3. (SELECT *, MATCH(keywords) AGAINST('$busqueda') AS relevancia FROM libros WHERE MATCH(keywords) AGAINST('$busqueda')
  4. AND tipo = 'nuevo'
  5. ORDER BY relevancia DESC, posicion ASC, precio DESC)
  6.  
  7. libros WHERE MATCH(keywords) AGAINST('$busqueda')
  8. AND tipo = 'nuevo'
  9. GROUP BY id_libro
  10.  
  11. LIMIT $numero_limite)










El resultado debería ser el que tiene como id_unico el "9".


¿Alguien sabe hacerlo?

Última edición por juanito_29899; 01/02/2014 a las 07:18
  #2 (permalink)  
Antiguo 01/02/2014, 12:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: GROUP BY en MATCH AGAINST respetando relevancia

Cuando haces GROUP BY algo lo que hace es agrupar por ese algo, debes decir que hay que hacer con los otros campos....

A ver si me explico

Tabla1
id_Unico
id_NoUnico
unCampoNumerico
unCampoDeTexto

Código MySQL:
Ver original
  1. SELECT * FROM Tabla1 GROUP BY id_NoUnico;

Que te parece que puede hacer para agrupar los siguientes registros

1,1,3,untexto
2,1,5,otrotexto
3,2,4,mastexto
4,3,7,ultimotexto

los registros cuyo id_NoUnico no se repiten, es facil

3,2,4,mastexto
4,3,7,ultimotexto

pero en el caso de id_NoUnico=1 que esperas que haga la consulta?


Sepodria solucionar esto

Código MySQL:
Ver original
  1. SELECT id_NoUnico,SUM(unCampoNumerico) FROM Tabla1 GROUP BY id_NoUnico;

1,8 <--- 3+5
2,4
3,7

SUM es una de las funciones de agregado de mysql. Como puedes intuir no tiene sentido agrupar por un campo sin definir funciones de agregado para los o alguno de los otros campos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: group, match, relevancia, select
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 11:18.