Como classificar os resultados deste código?

Estou criando um recurso de pesquisa que permitirá ao usuário digitar uma pergunta, meu código irá combinar tantas palavras quanto possível com as perguntas já no meu banco de dados MySQL e exibir os 5 melhores resultados, dependendo da quantidade de palavras que são correspondidas a questão.

Eu uso umcount() função que conta o número de palavras correspondentes, no entanto, no momento em que os resultados mostrados são exibidos como os primeiros 5 resultados no banco de dados que possuem uma correspondência de palavras de 50% ou mais. Eu quero que os resultados sejam mostrados como a maior correspondência primeiro e trabalhe para cada resultado no banco de dados, mas apenas mostre o top 5. Aqui está o código que eu tenho

<?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>";
    }
?>

A imagem abaixo mostra o que acontece quando procuro "Como criar meu próprio site" na barra de pesquisa. Eu já tenho várias perguntas no banco de dados para teste, que são todas perguntas semelhantes e uma última entrada é uma correspondência exata para a pergunta que eu fiz, mas como atualmente está mostrando os primeiros 5 resultados de math, ela ignora a correspondência completa. Aqui estão os resultados dessa pesquisa.

Eu adicionei um pouco de código que mostra quantas correspondências de palavras existem em cada questão apenas para que você possa vê-lo funcionando um pouco melhor. Também é uma coincidência que, em ordem crescente, está mostrando os primeiros 5 resultados correspondentes no banco de dados.

Qual código eu preciso adicionar a isto para organizá-lo para que ele mostre a correspondência mais próxima do banco de dados inteiro primeiro, depois a segunda melhor correspondência, a terceira etc ...?

questionAnswers(1)

yourAnswerToTheQuestion