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