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

Asignar prioridad a una búsqueda

Estas en el tema de Asignar prioridad a una búsqueda en el foro de Mysql en Foros del Web. Hola a todos!!, estoy intentando asignar una prioridad a una búsqueda y que esta pueda sumarse con otra, y luego ordenar los resultados. Por ejemplo, ...
  #1 (permalink)  
Antiguo 26/03/2012, 15:01
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Pregunta Asignar prioridad a una búsqueda

Hola a todos!!, estoy intentando asignar una prioridad a una búsqueda y que esta pueda sumarse con otra, y luego ordenar los resultados.

Por ejemplo, hago la búsqueda de una frase, si aparece en el título serían 4 puntos, si aparece en la desripción 2 y si aparece en la url 1 punto. Luego los sumo, y ordeno por cantidad de puntos:

1º el que tenga 7 puntos
2º el que tenga 6 puntos
3º etc....

Como puedo lograr esto??, actualmente yo busco de esta manera:

Código MySQL:
Ver original
  1. mysql_query("SELECT distinct artTitulo, artDescripcion, palabrasArticulo  
  2.  
  3. from
  4.  
  5. ((select s1.artTitulo, s1.artDescripcion, s1.palabrasArticulo, 1 as priority from articulos s1 WHERE MATCH (artTitulo) AGAINST ('$frase'))
  6.  
  7. union
  8.  
  9. (select s2.artTitulo, s2.artDescripcion, s2.palabrasArticulo, 2 as priority from articulos s2 WHERE MATCH (artDescripcion) AGAINST ('$frase'))
  10.  
  11. union
  12.  
  13. (select s3.artTitulo, s3.artDescripcion, s3.palabrasArticulo, 3 as priority from articulos s3 WHERE MATCH (palabrasArticulo) AGAINST ('$frase'))) uDR
  14.  
  15. order by uDR.priority DESC ", $server_link)
  16.                               or die(mysql_error());

Pero los resultados no son muy buenos y muchas veces los usuarios no encuentran lo que buscan.

Muchas gracias y espero que puedan ayudarme
  #2 (permalink)  
Antiguo 27/03/2012, 02:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 12 años
Puntos: 574
Respuesta: Asignar prioridad a una búsqueda

Te falta sumar las prioridades no?

Código MySQL:
Ver original
  1. SELECT uDR.artTitulo,
  2.              uDR.artDescripcion,
  3.              uDR.palabrasArticulo  
  4. (select s1.artTitulo, s1.artDescripcion, s1.palabrasArticulo, 1 as priority from articulos s1 WHERE MATCH (artTitulo) AGAINST ('$frase'))
  5. (select s2.artTitulo, s2.artDescripcion, s2.palabrasArticulo, 2 as priority from articulos s2 WHERE MATCH (artDescripcion) AGAINST ('$frase'))
  6. (select s3.artTitulo, s3.artDescripcion, s3.palabrasArticulo, 3 as priority from articulos s3 WHERE MATCH (palabrasArticulo) AGAINST ('$frase'))) uDR
  7. GROUP BY uDR.artTitulo,
  8.              uDR.artDescripcion,
  9.              uDR.palabrasArticulo  
  10. order by SUM(uDR.priority) DESC;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 27/03/2012, 17:19
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Respuesta: Asignar prioridad a una búsqueda

gracias por la respuesta, pero lo que estoy intentando es asignarle un número a artTitulo, otro a artDescripcion y a palabrasArticulo.

Por ejemplo, artTitulo vale 4 puntos, artDescripcion 2 puntos y palabrasArticulo 1 punto, entonces el resultado con mayor cantidad de puntos, (sería el que tiene la frase en los 3 campos = 7 puntos), iría primero, luego los resultados con 6 puntos, luego con, 5, 4, 2, 1.

No se muy bien como lograr esto. Espero que puedan ayudarme, gracias.
  #4 (permalink)  
Antiguo 28/03/2012, 00:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 12 años
Puntos: 574
Respuesta: Asignar prioridad a una búsqueda

Entonces debes cambiar los valores de priority segun los puntos que quieres asignar, sumarlos y ordenar por la suma como te decia, no?.


Código MySQL:
Ver original
  1. SELECT uDR.artTitulo,
  2.              uDR.artDescripcion,
  3.              uDR.palabrasArticulo  
  4. (SELECT s1.artTitulo, s1.artDescripcion, s1.palabrasArticulo, 4 as priority FROM articulos s1 WHERE MATCH (artTitulo) AGAINST ('$frase'))
  5. (SELECT s2.artTitulo, s2.artDescripcion, s2.palabrasArticulo, 2 as priority FROM articulos s2 WHERE MATCH (artDescripcion) AGAINST ('$frase'))
  6. (SELECT s3.artTitulo, s3.artDescripcion, s3.palabrasArticulo, 1 as priority FROM articulos s3 WHERE MATCH (palabrasArticulo) AGAINST ('$frase'))) uDR
  7. GROUP BY uDR.artTitulo,
  8.              uDR.artDescripcion,
  9.              uDR.palabrasArticulo  
  10. ORDER BY SUM(uDR.priority) DESC;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 28/03/2012, 10:40
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Respuesta: Asignar prioridad a una búsqueda

Si, estuve probando pero si le cambio los números no ordena los resultados de otra manera, osea, por mas que ponga, 4, 2 y 1 o 1, 10 y 4, los resultados siguen siendo iguales.

No esta teniendo en cuenta el valor de cada prioridad.

Gracias por la ayuda!
  #6 (permalink)  
Antiguo 30/03/2012, 02:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 12 años
Puntos: 574
Respuesta: Asignar prioridad a una búsqueda

Código MySQL:
Ver original
  1. SELECT uDR.artTitulo,
  2.              uDR.artDescripcion,
  3.              uDR.palabrasArticulo,
  4.              SUM(uDR.priority) as SPriority
  5. (SELECT s1.artTitulo, s1.artDescripcion, s1.palabrasArticulo, 4 as priority FROM articulos s1 WHERE MATCH (artTitulo) AGAINST ('$frase'))
  6. (SELECT s2.artTitulo, s2.artDescripcion, s2.palabrasArticulo, 2 as priority FROM articulos s2 WHERE MATCH (artDescripcion) AGAINST ('$frase'))
  7. (SELECT s3.artTitulo, s3.artDescripcion, s3.palabrasArticulo, 1 as priority FROM articulos s3 WHERE MATCH (palabrasArticulo) AGAINST ('$frase'))) uDR
  8. GROUP BY uDR.artTitulo,
  9.              uDR.artDescripcion,
  10.              uDR.palabrasArticulo  
  11. ORDER BY SUM(uDR.priority) DESC;

Intenta esto para ver el valor de la suma... si no esta sumando, intenta lo mismo pero cambiando UNION por UNION ALL.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 31/03/2012, 10:06
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Respuesta: Asignar prioridad a una búsqueda

Lamentablemente no funcionó ni con UNION, ni UNION ALL, ni añadiendo el sum en el select principal.

PD: Sigo buscando una solución, si la encuentro lo aviso por aquí.
  #8 (permalink)  
Antiguo 31/03/2012, 10:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 12 años
Puntos: 574
Respuesta: Asignar prioridad a una búsqueda

Si me dices que es lo que no funciona, si da un error copialo o si da datos distintos a los esperados di en que sentido. Imaginar es dificil.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 31/03/2012, 18:55
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Respuesta: Asignar prioridad a una búsqueda

Cita:
Iniciado por quimfv Ver Mensaje
Si me dices que es lo que no funciona, si da un error copialo o si da datos distintos a los esperados di en que sentido. Imaginar es dificil.
No tiene ningún error, pero los resultados siguen sin cambiar, osea el problema sigue siendo el de antes, al hacer cambios en el código no sucedía nada, los resultados seguían siendo iguales.

Ahora cuando probé con UNION ALL y el nuevo código, los resultados tampoco cambiaron su orden, siguen igual que cuando empezamos.

Saludos!
  #10 (permalink)  
Antiguo 02/04/2012, 01:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 12 años
Puntos: 574
Respuesta: Asignar prioridad a una búsqueda

Código MySQL:
Ver original
  1. SELECT uDR.artTitulo,
  2.              uDR.artDescripcion,
  3.              uDR.palabrasArticulo,
  4.              SUM(uDR.priority) as SPriority
  5. (SELECT s1.artTitulo, s1.artDescripcion, s1.palabrasArticulo, 4 as priority FROM articulos s1 WHERE MATCH (artTitulo) AGAINST ('$frase'))
  6. (SELECT s2.artTitulo, s2.artDescripcion, s2.palabrasArticulo, 2 as priority FROM articulos s2 WHERE MATCH (artDescripcion) AGAINST ('$frase'))
  7. (SELECT s3.artTitulo, s3.artDescripcion, s3.palabrasArticulo, 1 as priority FROM articulos s3 WHERE MATCH (palabrasArticulo) AGAINST ('$frase'))) uDR
  8. GROUP BY uDR.artTitulo,
  9.              uDR.artDescripcion,
  10.              uDR.palabrasArticulo  
  11. ORDER BY SPriority DESC;

Alguna pista mas deberías dar...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #11 (permalink)  
Antiguo 02/04/2012, 11:39
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 11 años
Puntos: 29
Respuesta: Asignar prioridad a una búsqueda

Sigue sin funcionar, los resultados no se cambian por más que le de mayor prioridad al titulo, o a la descripción siguen igual.

No sé si es posible y existe, pero los números (4, 2 y 1) serán utilizados como identificadores entonces al sumar no afecta al orden??.

Saludos

Etiquetas: prioridad, query, select, sql
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 15:41.