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'))
";
$buscarent= mysql_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";
}
Espero haber explicado bien mi problema y agradezco de antemano cualquier ayuda.