Foros del Web » Programando para Internet » PHP »

Sumar Score(Match Against)de dos consultas

Estas en el tema de Sumar Score(Match Against)de dos consultas en el foro de PHP en Foros del Web. Hola a todos, Este es el primer tema que creo y quiero aprovechar para dar las gracias a la comunidad de forosdelweb por su ayuda ...
  #1 (permalink)  
Antiguo 15/12/2006, 10:07
 
Fecha de Ingreso: octubre-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
Pregunta Sumar Score(Match Against)de dos consultas

Hola a todos,
Este es el primer tema que creo y quiero aprovechar para dar las gracias a la comunidad de forosdelweb por su ayuda indirecta.

Vayamos al tema:

Mi problema es que me gustaría ordenar una consulta utilizando Scores de otras consultas y no sé como hacerlo.
No sé siquiera si se puede hacer porque no tengo mucha experiencia en php ni Sql y no he encontrado nada parecido.(Tampoco sé dónde me podréis ayudar mejor si aquí o en los foros de PHP.)

Tengo una BD con cuatro tablas: proyectos, entidades, link_proy_entpart(relaciona proyectos con ent. participantes), link_proy_entfin(relaciona proyectos con ent. financiadoras).

Para hacer la búsqueda desde la web con php utilizo un buscador que usa MatchAgainst cuando introduces más de una palabra de búsqueda.
El código que he utilizado para realizar la consulta es algo parecido a:


Código PHP:
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
    //busqueda de frases con más de una palabra y un algoritmo especializado


//Buscamos las entidades participantes y financiadoras que coinciden con la búsqueda
   
  
$query_buscarent "SELECT  link_proy_entpart.id_proy,
MATCH(entidades.ent_nom) AGAINST('$busqueda_buscarproy') AS Score1
FROM link_proy_entpart JOIN entidades ON 
link_proy_entpart.id_entpart=entidades.id WHERE (MATCH
(entidades.ent_nom) AGAINST('$busqueda_buscarproy'))
  UNION
  SELECT  link_proy_entfin.id_proy, MATCH(entidades.ent_nom) AGAINST
('$busqueda_buscarproy') AS Score2 FROM link_proy_entfin JOIN entidades
 ON link_proy_entfin.id_entfin=entidades.id 
WHERE (MATCH(entidades.ent_nom) AGAINST('$busqueda_buscarproy'))
  "
;
         
        
$buscarentmysql_query($query_buscarent$BDGSEE) or die(mysql_error());
$totalRows_buscarent mysql_num_rows($buscarent);


//Si encontramos  entidades que coincidan con la busqueda

if($totalRows_buscarinvent>0){

//Primero buscamos las coincidencias en Proyectos
$query_buscarproy"SELECT proyectos.id, proyectos.titulo, proyectos.fecha, 
(MATCH ( proyectos.titulo) AGAINST (  '$busqueda_buscarproy' )) AS Score
FROM proyectos 
WHERE (MATCH ( proyectos.titulo) AGAINST ('$busqueda_buscarproy' ) "
;

//Ahora añadimos a la consulta las entidades encontradas
while($row_buscarent mysql_fetch_assoc($buscarent)){
$query_buscarproy.=" OR proyectos.id=$row_buscarent[id_proy]";} 

$query_buscarproy.=")";

$query_buscarproy.=" ORDER BY $order";
 
 } 
Lo que pretendo es que la consulta $query_buscarproy se ordene con algo así como 'Score+Score1+Score2 DESC' con Score1 y Score2 pertenecientes a $query_buscarent .

Espero haber explicado bien mi problema y agradezco de antemano cualquier ayuda.
  #2 (permalink)  
Antiguo 02/01/2007, 17:07
 
Fecha de Ingreso: octubre-2006
Mensajes: 11
Antigüedad: 18 años, 1 mes
Puntos: 0
Pregunta Re: Sumar Score(Match Against)de dos consultas

Hola de nuevo,

Entiendo que nadie halla contestado, porque creo que la explicación está bastante liosa.
El caso es que yo sigo investigando y he descubierto lo de las subconsultas con ANY y he decidido modificarla, aunque la duda sigue existiendo.

Os recuerdo:
Tengo 4 tablas: proyectos, entidades, link_proy_entfin(link entre proyectos y entidades financiadoras), link_proy_entpart(link entre proyectos y entidades participantes)

Quiero obtener los proyectos ordenados por Score(el del MATCH AGAINST del titulo) más los Scores de (MATCH
(entidades.ent_nom) AGAINST('$busqueda_buscarproy')) que salen de las subconsultas de entidades financiadoras y participantes.
Yo sólo he sido capaz de ordenarlo por el Score que sale ahí.

El código que tengo es:

Código:
SELECT proyectos.id, proyectos.titulo, (MATCH (proyectos.titulo)
AGAINST ( '$busqueda_buscarproy')AS Score FROM proyectos WHERE
(MATCH ( proyectos.titulo) AGAINST ('$busqueda_buscarproy' )
OR proyectos.id=ANY(SELECT  link_proy_entpart.id_proy FROM 
link_proy_entpart JOIN entidades ON 
link_proy_entpart.id_entpart=entidades.id WHERE (MATCH
(entidades.ent_nom) AGAINST('$busqueda_buscarproy')))
OR proyectos.id=ANY(SELECT  link_proy_entfin.id_proy FROM link_proy_entfin 
JOIN entidades ON link_proy_entfin.id_entfin=entidades.id WHERE (MATCH
(entidades.ent_nom) AGAINST('$busqueda_buscarproy')))) ORDER BY Score DESC
He intentado ya bastantes cosas y no me sale con ninguna.
A ver si ahora me puede ayudar alguien.Aunque solo sea decirme si es posible hacerlo.
Saludos
  #3 (permalink)  
Antiguo 02/01/2007, 19:08
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 23 años
Puntos: 655
Re: Sumar Score(Match Against)de dos consultas

Movido a PHP.

Por favor lee la Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
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 14:43.