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