Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL пълнотекстово търсене в множество таблици с различни полета

Попаднах на този проблем при изграждане на търсене в уебсайт с множество видове съдържание (база данни за филми). Исках потребителят да може да направи едно търсене и да намери име на актьор, филм или герой.

Вместо да се опитвам да получа едно голямо SQL изявление, направих съвпадение за всеки тип съдържание (заглавие на филм, сюжет на филма, име на актьор, име_на и т.н.) и залепих идентификатора на реда, типа съдържание и резултата от съвпадението в многоизмерен масив. Обикновено ограничавам всеки тип съдържание до първите 50 съвпадения.

След това успях да сортирам масива въз основа на резултата. След това бих използвал идентификатора и типа съдържание, за да търся информацията, която ми е необходима за всеки резултат.

РЕДАКТИРАНЕ (добавяне на код)

Отказ от отговорност:Това е стар код и вероятно има по-ефективни начини да го направите

$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('\'','&#39;',createPersonMovieImageLink($topResults[$i][0]));
            $countMovies++;
        }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Може ли MySQL FIND_IN_SET или еквивалент да се използва за използване на индекси?

  2. MySQL брои всички външни ограничения

  3. Колко скъпи са JOIN в SQL? И/или какъв е компромисът между производителността и нормализирането?

  4. ASP.NET MVC 4 EF5 с MySQL

  5. Разлика между използването на РЕФЕРЕНЦИИ със и без ВЪНШЕН КЛЮЧ?