Как отсортировать результаты этого кода?

Я создаю функцию поиска, которая позволит пользователю вводить вопрос, и тогда мой код сопоставит как можно больше слов с вопросами, уже находящимися в моей базе данных MySQL, и отобразит 5 лучших результатов в зависимости от количества слов, которые соответствуют вопрос.

Я используюcount() функция, которая подсчитывает количество подходящих слов, однако в данный момент показанные результаты отображаются как первые 5 результатов в базе данных, которые имеют совпадение слов на 50% или более. Я хочу, чтобы результаты сначала отображались как наивысшее совпадение, и для каждого результата в базе данных они идут вниз, но отображаются только первые 5. Вот код, который у меня есть

<?php
    include("config.php");
    $search_term = filter_var($_GET["s"], FILTER_SANITIZE_STRING); //User enetered data
    $search_term = str_replace ("?", "", $search_term); //remove any question marks from string
    $search_count = str_word_count($search_term);  //count words of string entered by user
    $array = explode(" ", $search_term); //Seperate user enterd data

    foreach ($array as $key=>$word) {
        $array[$key] = " title LIKE '%".$word."%' "; //creates condition for MySQL query
    }

    $q = "SELECT * FROM posts WHERE  " . implode(' OR ', $array); //Query to select data with word matches
    $r = mysql_query($q);
    $count = 0; //counter to limit results shown
    while($row = mysql_fetch_assoc($r)){
        $thetitle = $row['title']; //result from query
        $thetitle = str_replace ("?", "", $thetitle);  //remove any question marks from string
        $title_array[] = $thetitle;  //creating array for query results
        $newarray = explode(" ", $search_term); //Seperate user enterd data again
        foreach($title_array as $key => $value) {
            $thenewarray = explode(" ", $value); //Seperate each result from query
            $wordmatch = array_diff_key($thenewarray, array_flip($newarray));
            $result = array_intersect($newarray, $wordmatch);
            $matchingwords = count($result); //Count the number of matching words from
            //user entered data and the database query
        }

        if(mysql_num_rows($r)==0)//no result found
        {
            echo "<div id='search-status'>No result found!</div>";
        }
        else //result found
        {
            echo "<ul>";
            $title = $row['title'];
            $percentage = '.5'; //percentage to take of search word count
            $percent = $search_count - ($search_count * $percentage); //take percentage off word count
            if ($matchingwords >= $percent){

                ?>
            <li><a href='<?php echo $row['url']; ?>'><?php echo $title ?><i> &nbsp; No. matching words: <?php echo $matchingwords; ?></i></a></li>
            <?php

                $count++;
                if ($count == 5) {break;
                }
            }else{
            }
        }
        echo "</ul>";
    }
?>

На изображении ниже показано, что происходит, когда я выполняю поиск & quot; Как создать свой собственный веб-сайт & quot; в строке поиска. У меня уже есть несколько вопросов в базе данных для тестирования, которые являются похожими вопросами, и одна последняя запись является точным совпадением с вопросом, который я задал, но, поскольку в настоящее время он показывает их как первые 5 результатов сопоставления, он игнорирует полное совпадение. Вот результаты этого поиска. enter image description here

Я добавил немного кода, который показывает, сколько совпадений слов есть в каждом вопросе, чтобы вы могли видеть, что он работает немного лучше. Также совпадение, что он в порядке возрастания показывает первые 5 результатов поиска в базе данных.

Какой код мне нужно добавить к этому, чтобы упорядочить его так, чтобы он сначала показывал наиболее близкое совпадение из всей базы данных, затем второе наилучшее совпадение, третье и т. Д ...?

Ответы на вопрос(1)

Ваш ответ на вопрос