Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm kiếm toàn văn bản trong MySQL trên nhiều bảng với các trường khác nhau

Tôi đã gặp vấn đề này khi xây dựng một tìm kiếm trên một trang web có nhiều loại nội dung (cơ sở dữ liệu phim). Tôi muốn người dùng có thể thực hiện một tìm kiếm và tìm thấy tên diễn viên, phim hoặc nhân vật.

Thay vì cố gắng lấy một câu lệnh SQL lớn, tôi đã thực hiện đối sánh cho từng loại nội dung (movie_title, movie_plot, Actor_name, character_name, v.v.) và dán id của hàng, loại nội dung và điểm của trận đấu thành một mảng nhiều chiều. Tôi thường giới hạn mỗi loại nội dung trong 50 nội dung phù hợp nhất.

Sau đó tôi đã có thể sắp xếp mảng dựa trên điểm số. Sau đó, tôi sẽ sử dụng id và loại nội dung để tra cứu thông tin tôi cần cho mỗi kết quả.

CHỈNH SỬA (thêm mã)

Tuyên bố từ chối trách nhiệm:Đây là mã cũ và có lẽ có nhiều cách hiệu quả hơn để thực hiện điều đó

$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. Cập nhật Yii2 QueryBuilder với Tham gia

  2. Khung thực thể với mysql, Vấn đề viết hoa bảng giữa linux và windows

  3. mysql chọn ngày trong phạm vi 30 ngày

  4. Làm cách nào để gọi một thủ tục được lưu trữ trên máy chủ MySQL Ubuntu từ xa?

  5. Di chuyển dữ liệu và lược đồ từ MySQL sang SQL Server