Encontré este problema al crear una búsqueda en un sitio web con múltiples tipos de contenido (base de datos de películas). Quería que el usuario pudiera hacer una búsqueda y encontrar un nombre de actor, película o personaje.
En lugar de intentar obtener una declaración SQL grande, hice una coincidencia para cada tipo de contenido (título_película, trama_película, nombre_actor, nombre_personaje, etc.) y asigné la identificación de la fila, el tipo de contenido y la puntuación de la coincidencia. en una matriz multidimensional. Por lo general, limitaría cada tipo de contenido a las 50 mejores coincidencias.
Luego pude ordenar la matriz según la puntuación. Luego usaría la identificación y el tipo de contenido para buscar la información que necesitaba para cada resultado.
EDITAR (agregar código)
Descargo de responsabilidad:este es un código antiguo y probablemente haya formas más eficientes de hacerlo
$topResults = array();
$topResults[0] = array('nil', 'nil', 0);
$movieFound = 0;
$plotFound = 0;
$actorFound = 0;
$characterFound = 0;
// example of movie title... follow the same procedure for the others
$sql = "SELECT movies.Movie_ID as mid, MATCH (Movie_Title) AGAINST ('$searchstring') AS Score FROM movies, Rating_Movie_Relationships WHERE MATCH (Movie_Title) AGAINST ('$searchstring') AND Front_Image_File IS NOT NULL AND movies.Movie_ID = Rating_Movie_Relationships.Movie_ID $sqlwhere ORDER BY Score DESC LIMIT 0, 20";
$result = @mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
for ($i = 0; $i < count($topResults);$i++){
if ($row['Score'] > $topResults[$i][2]){
for ($j = count($topResults); $j > $i; $j--){
$topResults[$j] = $topResults[$j-1];
}
$topResults[$i] = array($row['mid'], 'm', $row['Score'] - $movieWeight);
break;
}
}
$movieFound = 1;
}
//.... add the other content types here following the movie title example
for ($i = 0; $i < count($topResults); $i++){
if ($topResults[$i][1] == 'm'){
if ($countMovies < $limit) {
$movieTitleDivText .= str_replace('\'',''',createPersonMovieImageLink($topResults[$i][0]));
$countMovies++;
}
}