Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pencarian teks lengkap MySQL pada beberapa tabel dengan bidang yang berbeda

Saya menemukan masalah ini saat membangun pencarian di situs web dengan berbagai jenis konten (basis data film). Saya ingin pengguna dapat melakukan satu pencarian dan menemukan nama aktor, film, atau karakter.

Alih-alih mencoba mendapatkan satu pernyataan SQL besar, saya melakukan kecocokan untuk setiap jenis konten (judul_film, plot_film, nama_aktor, nama_karakter, dll.) dan menempelkan id baris, jenis konten, dan skor kecocokan menjadi array multidimensi. Saya biasanya akan membatasi setiap jenis konten hingga 50 kecocokan teratas.

Saya kemudian dapat mengurutkan array berdasarkan skor. Kemudian saya akan menggunakan id dan tipe konten untuk mencari informasi yang saya butuhkan untuk setiap hasil.

EDIT (menambahkan kode)

Penafian:Ini adalah kode lama, dan mungkin ada cara yang lebih efisien untuk melakukannya

$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. Menggunakan mysqldump untuk memformat satu sisipan per baris?

  2. Alternatif SQL Server Express melampaui batas 2GB

  3. Saya membutuhkan halaman PHP saya untuk menampilkan gambar BLOB saya dari database mysql

  4. Aplikasi Web Chat menggunakan Teknologi Long-Polling dengan PHP, MySQL dan jQuery

  5. Pustaka tidak dimuat:kesalahan libmysqlclient.16.dylib saat mencoba menjalankan 'rails server' di OS X 10.6 dengan permata mysql2